InvalidAuthenticityToken in Entwickeln::SessionsController#destroy (sign out nach bereits abgemeldet)
Ich bin mit Entwickeln 3.2.0
für die Authentifizierung und fand ein Problem wenn ich den folgenden Code:
- tab 1: Zeichen in app
- tab 2: gehen Sie zu einer beliebigen Seite in der app
- tab 2: Zeichen aus (Erfolg)
- tab 1: Zeichen aus (Fehler - siehe Ausnahme unten)
Ausnahme ausgelöst:
ActionController::InvalidAuthenticityToken in Entwickeln::SessionsController#zerstören
In der Entwicklung log sehe ich:
Nicht überprüfen können CSRF token authenticity
Und die obersten drei Zeilen der stack-trace sind:
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:163:in `handle_unverified_request'
actionpack (4.0.0) lib/action_controller/metal/request_forgery_protection.rb:170:in `handle_unverified_request'
devise (3.2.0) lib/devise/controllers/helpers.rb:198:in `handle_unverified_request'
Wie kann ich sicherstellen aufeinander Zeichen outs nicht zu einer Ausnahme?
- Seine nicht aufeinanderfolgenden Zeichen aus, die Sie versuchen, melden Sie sich, wenn Sie sich Abmelden. also warum nicht melden Sie sich Benutzer von tab1 , wenn Sie sich Abmelden aus tab2
- Ich bin nicht sicher, warum Sie sagen, dass dies nicht eine aufeinander folgende Zeichen aus. Aufeinander Folgen einander. Wenn ich versuche, melden Sie sich in einem tab nach der Unterzeichnung in die andere, das ist sukzessive so weit ich bin besorgt. Der Punkt ist aber, dass dies eine sehr vernünftige Aktion, die die Nutzer ergreifen können. Nur ein Beispiel ist, dass ein Benutzer öffnet mehrere tabs auf einer einzigen Seite, und wenn Sie melden sich in einem tab, und dann gehen Sie sukzessive schließen Sie die anderen Registerkarten, können Sie versuchen, melden Sie sich wieder (durch den unterzeichneten-im Aussehen von allen anderen Reitern).
- jetzt verstehe ich es. Ja, Entwickeln haben sollte behandelt den logout-Szenario ohne zu werfen fiesen Fehler. Aber wieder, Sie können sagen, das ist, was wir nennen
customization
. KirtiThorat die Problemumgehung ist wahrscheinlich eine bessere Lösung Entwickeln, bis Sie implementiert. - Finden Sie in der Ausgabe eingereicht von @freddyrangel github.com/plataformatec/devise/issues/2934 auf Entwickeln Github-Repo. Sie können an der Diskussion teilnehmen, durch die Unterstützung das Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was passiert,
Wenn Sie zunächst abgemeldet aus dem tab-2 -, Sitzungs-und authenticity_token im Zusammenhang mit dem angemeldeten Benutzer zerstört wurde.
Wenn Sie versuchen, melden Sie sich bei tab 1, Entwickeln Sie wieder versucht zu zerstören, die Sitzung mit Hilfe des authenticity_token, die zerstört wurde, auf der Registerkarte 2.
Daher erhalten Sie die Fehlermeldung
ActionController::InvalidAuthenticityToken
so entwickeln, misslingt die Authentifizierung mit dem gegebenenauthenticity_token
.Erhalten Sie nur eine einmalige Sitzung pro anmelden, wenn das zerstört wird werden Sie haben nichts zu zerstören wieder.
BEARBEITEN
Dieses Verhalten nicht vorgesehen ist, Entwickeln. Wenn Sie möchten, implementieren Sie ein solches Verhalten müssen Sie das überschreiben SessionsController.
Erstellen Sie eine
sessions_controller.rb
Datei inapp/controllers/users
VerzeichnisUpdate
routes.rb
Eine einfache Lösung für dieses problem könnte auch werden, so dass Zeichen outs über BEKOMMEN, anstatt diese zu LÖSCHEN. In entwickeln.rb können Sie einfach ändern:
Vergangenheit diese im layout:
<%= csrf_meta_tags %>
Können Sie ändern die Strategie von verify csrf token.
In rails 3 ist die default-Strategie, wenn Sie überprüfen, gescheitert ist, ist die Rückgabe einer null-Sitzung. In rails 4 geändert wurde der Strategie, die in application_controller, um wieder eine Ausnahme.
Ich dieses Problem lösen, ändern in meinem application_controller.rb
Diese Weise, verwenden Sie die Standard-Strategie.
Dieser Fehler wurde behoben in
devise 3.3.0
.already_signed_out
imconfig/locales/en.yml
Kirti ist genau richtig. Ich hatte das problem gestern auch, aber mit einem custom-authentication-Lösung. Wenn das wirklich ein problem, das Sie beheben wollen, könnten Sie herausfinden, wie zu überschreiben Entwickeln, die signout-Aktion, und fügen Sie
skip_before_filter :verify_authenticity_token
für diese Aktion.Wenn Sie immer noch das Problem, wie ich im
Rails 5
unddevise 4.4.1
in der app/controllers/application_controller.rb ändernzu
hoffe, es hilft.