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 name
username
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 diedef 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.
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
@Vishal vergessen, es hinzuzufügen.Ich habe die Frage jetzt aktualisiert – Rob
Kannst du deine 'store_location' Methode auch einschließen? – Vishal