Meine App verwendet Reagieren auf das Frontend und Laravel 5.4 auf dem Back-End. Ich verwende fetch()
, um Daten vom Backend anzufordern. Das Problem besteht darin, dass beim Laden der Seite zwei Sitzungen erstellt werden. A TokenMismatchException
wird von der CSRF-Middleware ausgelöst, wenn eine Anforderung POST
gestellt wird, da das Token, das gesendet wird, mit der ersten Sitzung übereinstimmt, die erstellt wird, aber es gegen die Sekunde überprüft.React Fetch zu Laravel API erstellt neue Sitzung
Ich gründe das Token in app.blade.php
<meta name="_token" content="{{ csrf_token() }}">
Und das Token in der Config holen
fetchConfig = {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
credentials: 'same-origin'
}}
Hier sind die entschlüsselten Sitzungen greifen:
a:3:{s:6:"_token";s:40:"7obvOzPaqqJDtVdij8RaqrvmTFLjKA2qnvYMxry6";s:9:"_previous";a:1:{s:3:"url";s:24:"http://localhost/page";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
a:3:{s:6:"_token";s:40:"5Aiws9Qy72YzlkfWX81zkhzrSeiMDYjFWiLeDAwN";s:9:"_previous";a:1:{s:3:"url";s:41:"http://localhost/api/page";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
anfordern URL: http://localhost/page
API URL: http://localhost/api/page
Wie kann ich eine neue Sitzung verhindern, erstellt wird, wenn die App GET
Anfrage seine anfängliche Reaktion macht?
Welche Session-Treiber verwenden Sie? –
Ich benutze den 'Datei'-Session-Treiber. – bill
Wenn Sie das JWT Auth-Token (JSON Web Token Authentication) für die Laravel-API verwendet haben. weil die API den Status nicht beibehalten kann.Wenn Sie also eine Csrf-Token-Verifizierung benötigen, müssen Sie sie als privaten Anspruch in einem Meta-Tag oder in einer JWT-Nutzlast speichern. –