Ich verwende Devise 3.2.0
für die Authentifizierung und habe ein Problem gefunden, wenn ich Folgendes mache:
Ausnahme ausgelöst:
ActionController :: InvalidAuthenticityToken in Devise :: SessionsController # destroy
Im Entwicklungsprotokoll sehe ich:
Die CSRF-Token-Authentizität kann nicht überprüft werden
Und die obersten drei Zeilen des Stack-Trace sind:
%Vor%Wie kann ich sicherstellen, dass aufeinanderfolgende Abmeldungen keine Ausnahme auslösen?
Dieser Fehler wurde in devise 3.3.0
behoben.
already_signed_out
in config/locales/en.yml
Hier ist was passiert,
Wenn Sie sich zu Beginn von Tab 2 abgemeldet haben, wurden Sitzung und Authentizitätstoken, die dem angemeldeten Benutzer zugeordnet sind, zerstört. Wenn Sie versuchen, sich von Tab 1 abzumelden, versucht Devise erneut, die Sitzung mit dem authenticity_token zu zerstören, das auf Tab 2 zerstört wurde.
Daher erhalten Sie den Fehler ActionController::InvalidAuthenticityToken
, da es mit der angegebenen authenticity_token
nicht möglich ist, die Authentifizierung durchzuführen.
Sie erhalten nur eine einmalige Sitzung pro Anmeldung, wenn diese zerstört wird, haben Sie nichts mehr zu zerstören.
BEARBEITEN
Dieses Verhalten wird von Devise nicht bereitgestellt. Wenn Sie ein solches Verhalten implementieren möchten, müssen Sie SessionsController überschreiben.
Erstellen Sie eine sessions_controller.rb
-Datei in app/controllers/users
-Verzeichnis
Aktualisieren Sie routes.rb
Sie können die Strategie zum Überprüfen des csrf-Tokens ändern.
In Rails 3 gibt die Standardstrategie bei fehlgeschlagener Überprüfung eine Nullsitzung zurück. In Rails 4 wurde die Strategie in application_controller geändert, um eine Ausnahme zurückzugeben.
Ich löse das und ändere es in meinem application_controller.rb
%Vor%So verwenden Sie die Standardstrategie.
Kirti ist genau richtig. Ich hatte dieses Problem gestern, aber mit einer benutzerdefinierten Authentifizierungslösung. Wenn dies wirklich ein Problem ist, das Sie beheben möchten, können Sie herausfinden, wie Sie die Abmeldeaktion von Devise überschreiben und skip_before_filter :verify_authenticity_token
für diese Aktion hinzufügen.
Tags und Links ruby-on-rails exception devise csrf