[RUBY] [Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück

Der Titel ist lang. Hier ist eine Zusammenfassung der freundlichen Weiterleitung.

Was ist freundliche 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.

Wie machst du es?

Der allgemeine Fluss ist wie folgt.

  1. Speichern Sie die angeforderte URL vorübergehend
  2. Wechseln Sie zum Anmeldebildschirm und bestätigen Sie die Anmeldung
  3. Kehren Sie zur angeforderten URL zurück

Methodendefinition

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.

Speichern Sie die angeforderte URL + Anmeldebestätigung vorübergehend

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

Kehren Sie zur angeforderten URL zurück

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.

schließlich

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.

Recommended Posts

[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
[Rails Devise] So wechseln Sie Benutzer, die nicht auf der Anmeldeseite angemeldet sind
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
So lösen Sie das Problem, dass das Website-Image nach der Bereitstellung auf Heroku in Rails 5 nicht angezeigt wird
Fälle, in denen Benutzer beim Bearbeiten einer App abgemeldet sind (Rails)
[Rails] So erhalten Sie die aktuell mit devise angemeldeten Benutzerinformationen
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
[Rails] So lösen Sie die Zeitverzögerung von created_at nach der Speichermethode
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
So erstellen Sie eine eindeutige Datenkombination in der Schienen-Zwischentabelle
So verhindern Sie, dass Benutzer, die nicht angemeldet sind, zur neuen Seite oder zur Bearbeitungsseite wechseln
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
So löschen Sie große Datenmengen in Rails und Bedenken
[Rails] Lesen Sie das RSS der Site und geben Sie den Inhalt an die Vorderseite zurück
So identifizieren Sie den Pfad, auf dem leicht Fehler gemacht werden können
Erstellen einer ArrayList, mit der Sie die Koordinaten einer zweidimensionalen Ebene eingeben und abrufen können
So lösen Sie das Problem, dass die Bean beim Verschachteln in Spring Batch nicht ordnungsgemäß verarbeitet wird
Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt
Ein Memo, das nüchtern von der Anfrage nach mehrteiligen / Formulardaten abhängig war
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
So testen Sie eine private Methode und verspotten sie teilweise in Java
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Für Sie, die beklagen, dass die Konvertierung von JODConverter + LibreOffice langsam ist
Bestätigung und Umgestaltung des Flusses von der Anfrage zum Controller in [httpclient]
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
So aktualisieren Sie Benutzeränderungen in Rails Devise, ohne ein Kennwort einzugeben
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
[Rails] Verwenden Sie devise, um Informationen zum aktuell angemeldeten Benutzer abzurufen
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] Die Ursache dafür, dass nicht gepostet werden konnte, war in form_with
So machen Sie https zum Schema der URL, die vom URL-Helfer von Rails generiert wurde
Ändern Sie das Speicherziel des Bildes in der Rails-App in S3. Teil 2
Ubuntu 18 ist das Betriebssystem, das einer Serverinstanz in der Sakura-Cloud eine Netzwerkkarte hinzufügt und eine lokale IP zuweist.
Einbetten und Anzeigen von YouTube-Videos in Rails (Sie können die eingegebene URL auch durch Bearbeiten abrufen).
Im Thema "Gesamtkonzentration" wird "Verwendung von Docker" für den virtuellen Mameko zusammengefasst, der in mir schläft.
So beheben Sie den Fehler 'ActionView :: Template :: Error' (Das Asset "application.css" ist in der Asset-Pipeline nicht vorhanden. '"Beim Vorkompilieren von Rails-Assets
Was tun gegen "Ein Server läuft bereits ...", ohne dass der Rails-Server im Terminal ausgeschaltet wurde
So fügen Sie ein Video in Rails ein
Eine Lösung für einen Fehler, der Sie verärgert, dass Sie in einer Produktionsumgebung nicht der MySQL-Standardeinstellung ONLY_FULL_GROUP_BY folgen und diese nicht eindeutig ist.
Ich habe versucht, eine Webanwendung zu erstellen, die Tweets mit einer Vue-Word-Cloud durchsucht und die Tendenz untersucht, was im zugehörigen Profil geschrieben steht
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
[Fehler] So beheben Sie das Phänomen, dass der Bildschirm nach der Bearbeitung nicht wechselt
Festlegen, wann in junit "Der Konstruktor Empty () ist nicht sichtbar" auftritt
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
So stellen Sie VSCode Remote Containers in einem Docker-Compose-Projekt bereit, das sowohl die API als auch die Front-App enthält
Mit Rails in eine Tag-zu-URL-Zeichenfolge konvertieren
Schaltfläche [Schienen], um zum Anfang der Seite zurückzukehren
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails