2016-03-19 5 views
0

Der Kern meiner App ist Build von Michael Hartl's rails tutorial. Vor kurzem habe ich die Benutzer-DB so geändert, dass die Spalte nameusername heißt und ich auch friendly_id für schönere URLs hinzugefügt habe. Ich aktualisierte überall, wo ich in Übereinstimmung mit diesen Änderungen finden konnte, und alles funktioniert reibungslos, außer für die freundliche Weiterleitung, nachdem sich ein Benutzer anmeldet. Wenn ein nicht eingeloggter Benutzer eine Seite zum Bearbeiten des Benutzers besucht, wird er zur Anmeldeseite weitergeleitet. Nach der Anmeldung sollte er zur Bearbeitungsseite weitergeleitet werden. Stattdessen loggt es sich einfach ein und bleibt auf der Anmeldeseite.Friendly Weiterleitung nach der Anmeldung funktioniert nicht nach dem Hinzufügen von Friendly_id zum Benutzermodell

Ich kann nicht überall sehen, die geändert werden müssen, dass es so funktioniert wieder und von dem, was ich sollte es

Sitzungssteuerung arbeiten sehen

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     params[:session][:remember_me] == '1' ? remember(user) : forget(user) 
     redirect_back_or user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

Benutzer Controller

before_action :correct_user, only: [:edit, :update] 
before_action :logged_in_user, only: [:edit, :update] 

def edit 
end 

private 


    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     store_location 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 


    def correct_user 
     @user = User.friendly.find(params[:id]) 
     redirect_to(root_url) unless current_user?(@user) 
    end 

Anwendungscontroller

def redirect_back_or(path) 
    redirect_to request.referer || path 
end 



    private 

    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     store_location 
     flash[:danger] = "You gotta login first!" 
     redirect_to login_url 
     end 
    end 

Sitzung Helfer

# Redirects to stored location (or to the default). 
    def redirect_back_or(default) 
    redirect_to(session[:forwarding_url] || default) 
    session.delete(:forwarding_url) 
    end 

    # Stores the URL trying to be accessed. 
    def store_location 
    session[:forwarding_url] = request.url if request.get? 
    end 

Wer weiß, wo das Problem liegen könnte?

aktualisieren

nach mit @vishal die Umleitung im Chat von der Anwendungssteuerung redirect_back_or Methode

def redirect_back_or(path) 
    redirect_to request.referer || path 
end 

Wenn ich es

auf die
def redirect_back_or(path) 
    redirect_to root_path || path 
end 

Ich genommen geschieht ändern Root-Pfad, so kenne ich diese Zeile wahrscheinlich der Schuldige.

In-zwischen ihm arbeiten und nicht arbeiten habe ich die mailboxer Juwel für private Nachrichten, änderte sich die name-username db Benutzer und hinzugefügt friendly_id zum username Spalte. Vielleicht könnte etwas herausstechen, weil es nicht mehr funktioniert.

+0

Haben Sie 'before_action: logged_in_user' in Ihrem UsersController? Der 'store_location' wird nur in' logged_in_user' aufgerufen, der anscheinend nicht als vorheriger Filter hinzugefügt wurde. – Vishal

+0

@Vishal vergessen, es hinzuzufügen.Ich habe die Frage jetzt aktualisiert – Rob

+0

Kannst du deine 'store_location' Methode auch einschließen? – Vishal

Antwort

1

Ändern Sie in Ihrem Anwendungscontroller die redirect_back_or (Pfad) -Methode in diese.

def redirect_back_or(path) 
     redirect_to session[:forwarding_url] || path 
     session.delete(:forwarding_url) 
    end 

Sie hatte redirect_to request.referer vor dem zum Umlenken auf die letzte URL, das heißt, die login_url verantwortlich war.

Ich habe keine Ahnung, warum Sie zwei verschiedene Methoden definieren - 1 in ApplicationController & 1 in SessionsHelper - mit dem gleichen Namen, aber verschiedene beabsichtigte Verhaltensweisen obwohl.

+1

Auch in Michael Hartls Tutorial, das du erwähntest, ist es 'request.referrer' und nicht' request.referer'. Ich weiß nicht, ob das irgendeinen Unterschied macht, aber es einfach da raus zu stellen. – Vishal

+0

Ja das ist es. Wenn ich meinen Commit-Verlauf betrachte, muss ich mich beim Implementieren des Postfächer-Gems im Robotermodus befinden und dem Anwendungscontroller die 'redirect_back_or (path)' - Methode hinzugefügt haben. Aus irgendeinem Grund dachte ich, ich hätte es vor langer Zeit hinzugefügt, also war es irrelivent. Vielen Dank für deine Hilfe – Rob

Verwandte Themen