Der Titel ist lang. Hier ist eine Zusammenfassung der freundlichen Weiterleitung.
Es ist eine Art Prozess wie "Die Seite, die Sie angefordert haben, die Seite nach dem Anmelden, aber Sie haben sich noch nicht angemeldet. Ich werde Sie zu der Seite führen, zu der Sie nach dem Anmelden gehen möchten." Freundliches Design, das Sie oft sehen. Das ist gut.
Der allgemeine Fluss ist wie folgt.
Bereiten Sie eine Methode (1) zum vorübergehenden Speichern der Anforderung und eine Methode (3) zum Zurückkehren zur vorübergehend gespeicherten URL vor. Schreiben Sie diesmal in "session_helper.rb" wie folgt.
helpers/sessions_helper.rb
# 1.Speichern Sie die angeforderte URL vorübergehend
def store_location
session[:forwarding_url] = request.original_url if request.get?
end
# 3.Kehren Sie zur angeforderten URL zurück
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
Speichern Sie die angeforderte URL (request.original_url) als "session [: forwarding_url]" in 1. if request.get?
beschränkt den Anforderungstyp nur auf GET-Aktionen.
3 ist der Vorgang, um zur vorübergehend gespeicherten URL oder zur standardmäßig angegebenen URL zurückzukehren. Überlegen Sie auch, ob die URL nicht vorhanden ist||
Danach kann die standardmäßig festgelegte URL eingegeben werden.
Wenn Sie die Sitzungsinformationen behalten, werden sie beim nächsten Anmelden gelesen und seltsam, sodass die URL vorübergehend mit "session.delete (: forwarding_url)" in der zweiten Zeile der Methode gespeichert wird Löschen.
Rufen Sie store_location
auf, um die URL, auf die Sie zugreifen möchten, vorübergehend zu speichern.
Hier schreibe ich es zusammen mit der Beschreibung, um zu überprüfen, ob der angemeldete Benutzer unter "users_controller.rb" privat ist.
users_controller.rb
class UsersController < ApplicationController
before_action :user_login_required
・
・
・
private
def user_login_required
unless logged_in? #Wenn nicht angemeldet
store_location #Speichern Sie die URL hier vorübergehend!
flash[:danger] = "Bitte loggen Sie sich ein" #Flash-Nachricht anzeigen
redirect_to login_url #Zum Senden an die Anmeldeseite gezwungen
end
end
Verwenden Sie "redirect_back_or (Standard)", um das Übergangsziel nach der Anmeldung anzugeben. Es ist in Ordnung, wenn Sie an der Stelle, an der der Anmeldevorgang ausgeführt wird, Folgendes schreiben.
controllers/sessions_controller.rb
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)
flash[:success] = "Sie sind jetzt angemeldet"
#Geben Sie unten das Umleitungsziel an. Standardmäßig wird hier Benutzer verwendet, aber Benutzer_Kann wie URL geschrieben werden
redirect_back_or user
else
flash.now[:danger] = 'Ich konnte mich nicht anmelden'
render 'new'
end
end
Damit ist die Implementierung abgeschlossen! Wenn Sie es wagen, von einer vorhandenen URL zu deportieren und sich dann anzumelden, werden Sie zu dieser URL weitergeleitet. Danke für Ihre Unterstützung.
Wie oben erwähnt, habe ich versucht, jede Rolle auf meine eigene Weise neu zu organisieren, damit sie auf einen Blick leicht verständlich ist. Ich hoffe, Sie finden es hilfreich.
Ich habe bei der Implementierung auf Folgendes hingewiesen. Vielen Dank.