Fügen Sie eine Logout-Button in RESTFUL Authentifizierung
-
24-09-2019 - |
Frage
habe ich RESTFUL Authentifizierung und alles installiert scheint zu funktionieren einwandfrei zu. ich kann und Login anmeldet. Nur so kann ich logout durch Eingabe der URL ist http: // localhost: 3000 / Logout
Wie füge ich einen Logout-Button auf einer Seite? Ich habe versucht, das Hinzufügen einer zur members.rhtml
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
, die die session_controller.rb verweist aber ich erhalte eine Fehlermeldung „Keine Aktion zu zeigen, reagierte Aktionen:. Erstellen, Löschen und neu“
irgendwelche Gedanken? Thanx
Lösung
Was haben Sie in Ihren Routen-Datei?
Versuchen Sie setzen
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
in der Routenberechnung.
Dann nur noch
<%= link_to "Sign out", log_out_url %>
für das Zeichen aus Verbindung.
Bearbeiten
Es ist alles darauf an, wie Sie das Routing angeben.
Da hatte man die map.log_out in der Routing, dann die URL http: // localhost: 3000 / Logout url aufgenommen wird, durch diese und weitergeleitet auf die richtige Aktion.
Wenn Sie:
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Dies wird erzeugt nur einen Link für Sie von http: // localhost: 3000 / Sitzung . Aber tut es nichts zur Routing. Sie müssen noch die richtigen Routen spezifizieren.
Beachten Sie, dass Rails nicht die Aktion an die URL anhängen zerstören. (Es wird nicht schaffen http: // localhost:. 3000 / session / zerstören ) er geht davon aus, dass, wenn Sie eine Aktion von zerstören, dass Sie es mit einem DELETE http verb werden zu senden. Aus irgendeinem Grunde perfektioniert sein nicht ganz und es tut auch das DELETE-Verb Standard tatsächlich zu senden.
Sie können es zwingen, dies zu tun:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Das wird noch nicht, es sei denn Sie arbeiten auch Route es richtig. Wenn Sie die folgenden in die Routen setzen:
map.resource :session
Dann Schienen wird das Routing für alle Verben erzeugen und die Standardaktionen für sie angeben, einschließlich DELETE. Rails Routing von außen : Weitere Informationen finden Sie hier .
Die ganze Seite ist lesenswert immer und immer wieder, bis Sie es wirklich verstehen. Routing ist der Schlüssel zum Verständnis Rails!
Für eine einfache Steuerung wie Sessions, ist es einfacher, nur die log_out Route zu spezifizieren und dann Link zu log_out_url ..
(Hoffnung, die Sinn macht, Schlafentzug kriecht in!)
Andere Tipps
Wenn Sie mit devise und Ihr betroffenes Modell ist Benutzer , die elegante Art und Weise ist hier:
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
Es funktioniert, weil:
- aufgrund HTTP-Methoden sind GET, POST, PUT, PATCH und DELETE, so
method: :delete
(nichtmethod: :destroy
) - verwenden wir
destroy_user_session_path
mit devise und Benutzer Modell wie üblich, wenn Sie andere Modellnamen definieren wie -Manager Sie gerade ändern Logout Pfad zudestroy_manager_session_path