InvalidAuthenticityToken in Devise :: SessionsController # destroy (Abmelden, nachdem Sie sich bereits abgemeldet haben)

8

Ich verwende Devise 3.2.0 für die Authentifizierung und habe ein Problem gefunden, wenn ich Folgendes mache:

  • Registerkarte 1: in zur App
  • signieren
  • Tab 2: Gehen Sie zu einer beliebigen Seite in der App
  • Registerkarte 2: sign out (Erfolg)
  • Registerkarte 1: sign out (Fehler - siehe Ausnahme unten)

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?

    
user664833 18.03.2014, 17:56
quelle

5 Antworten

1

Dieser Fehler wurde in devise 3.3.0 behoben.

user664833 24.01.2015, 01:13
quelle
10

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

%Vor%

Aktualisieren Sie routes.rb

%Vor%     
Kirti Thorat 18.03.2014 18:28
quelle
5

Eine einfache Lösung für dieses Problem könnte auch sein, Abmeldungen über GET statt über DELETE zuzulassen. In devise.rb können Sie einfach zu:

wechseln %Vor%     
Peleg 15.07.2014 14:37
quelle
1

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.

    
Nícolas Lazarte Kaqui 05.07.2014 21:51
quelle
0

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.

    
freddyrangel 18.03.2014 18:40
quelle
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '342114',
    'url' => 'invalidauthenticitytoken-in-devisesessionscontrollerdestroy-sign-out-after-a',
];

$_SESSION = [
    '__flash' => [],
];