Ich habe eine Laravel 5.1-Anwendung mit Ajax-Inhalt beim Start geladen.CSRF-Token funktioniert nicht in Laravel 5.1 Ausnahmen Handler mit einer Ajax-Anfrage
ich die CSRF-Meta-Tag auf Seite Kopf gesetzt haben:
<meta name="csrf-token" content="{{ csrf_token() }}" />
Und ich benutze es in Jquery AJAX-Anfragen:
Alles funktioniert perfekt unter normalen Umständen. Aber wenn ich öffnen Sie eine 404-Fehlerseite ohne vorherige Sitzung, erhalten meine AJAX-Anfragen einen Fehler: TokenMismatchException in VerifyCsrfToken.php
Ich habe einen 404-Fehler-Handler in der Datei: app \ Ausnahmen \ handler.php
public function render($request, Exception $e)
{
if ($e instanceof NotFoundHttpException)
{
$foo = \App\Foo::foo();
return \Response::make(view("errors.404", compact("foo")), 404);
}
return parent::render($request, $e);
}
Ich kann diesen Fehler wiederholen, indem ich ein privates Browserfenster öffne und meine Site mit einer URL zu einer nicht existierenden Seite öffne. Es bleibt beim erneuten Laden der Seite bestehen. Aber wenn ich auf eine bestehende Seite gehe und die 404-URL erneut ausprobiere, funktioniert es gut.
Irgendwelche Ideen, wie dieses Problem behoben wird?
EDIT:
Ich habe versucht, mehr Ajax-Anfragen zu überprüfen und es scheint, als ob jede Anforderung eine complitely andere Sitzung mit verschiedenen Token hat:
$request->session()->token();
Kein Glück. Die Funktion Middleware \ VerifyCsrfToken.php tokensMatch ruft das Token bereits ab: $ token = $ request-> input ('_ token')?: $ Request-> header ('X-CSRF-TOKEN'); – Corrodian
Ja, csrf_token() gibt einen Wert zurück. Ich könnte den Benutzer auf eine separate 404 URL umleiten und damit das Problem vermeiden. Dann würde der Benutzer jedoch die ursprüngliche URL verlieren. Es scheint merkwürdig, dass ich das tun müsste. – Corrodian