2012-03-28 6 views
0

So verwende ich Devise für die Benutzerauthentifizierung in meiner Rails App. Ich habe ein Setup, das überprüft, ob ein Benutzer Mitglied einer Liga ist. Wenn er nur Mitglied einer Liga ist, wird er auf die Seite user_league umgeleitet, wenn er mehrere Ligen hat, wird er zu seinem/ihrem Liga-Index geleitet, damit er auswählen kann, welche Liga er verwalten möchte. die ‚after_sign_in_path_for‘ Methode sieht wie folgt ausActive Admin hat Probleme bei der Anmeldung als After_sign_in_path_for (devise) in meiner App

def after_sign_in_path_for(resource_or_scope) 
    user_leagues = UserLeague.where(:user_id => current_user.id) 
    if(user_leagues.count == 1) 
     user_league_url(user_leagues[0].league.id) 
    else 
     "https://stackoverflow.com/users/#{current_user.id}/leagues" 
    end 
    end 

ich die Schienen Admin-Juwel ‚Aktiv Admin‘, die standardmäßig verwendet ersinnen für die Authentifizierung auch installiert. Jedesmal, wenn ich an Active Admin anmelden nach der Installation erhalte ich diese Fehlermeldung:

undefined method `admin_user_url' for #<ActiveAdmin::Devise::SessionsController:0x007f8be2f3e420> 

Grundsätzlich verfolgen ich es nach unten, wenn ich die Funktion entfernen ‚after_sign_in_path_for‘ oben und meinen Schienen-Server neu starten, die admin funktioniert gut (aber ich Ich kann mich nicht in meine App einloggen, wie ich es möchte. Wenn ich sie wieder einlege und meinen Server neu starte, erhalte ich den Fehler von der Admin-Seite. Was mache ich falsch? Wie kann ich den Login-Fluss meiner App beibehalten und mich trotzdem bei Active Admin anmelden?

Antwort

1

Ohne ActiveAdmin verwendet zu haben, würde ich annehmen, dass Sie die Art und Weise, wie sie die Weiterleitung intern nutzen, überstürzen?

Sie könnten versuchen, den Code in einem Block von current_user Verpackung, so dass Ihr Code wird nur ausgelöst, wenn es der Benutzer angemeldet:

def after_sign_in_path_for(resource_or_scope) 
    if current_user? 
    user_leagues = UserLeague.where(:user_id => current_user.id) 
    if(user_leagues.count == 1) 
     user_league_url(user_leagues[0].league.id) 
    else 
     "https://stackoverflow.com/users/#{current_user.id}/leagues" 
    end 
    else 
    super 
    end 
end 
Verwandte Themen