Sök…
Introduktion
Jag har analyserat att förhållandet mellan att få TokenMismatch Error är mycket högt. Och detta fel inträffar på grund av några dumma misstag. Det finns många skäl till att utvecklare gör misstag. Här är några av exemplen, dvs ingen _token på rubriker, ingen _token skickad data när du använder Ajax, tillståndsproblem på lagringsväg, en ogiltig lagringsväg för sessionen.
Inställningstoken på sidhuvudet
Ställ in token på <head>
för din default.blade.php
.
<meta name="csrf-token" content="{{csrf_token()}}">
Lägg till ajaxSetup
på toppen av ditt skript, som kommer att vara tillgängligt överallt. Detta ställer in rubriker på varje ajax
samtal
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Ställ in symbolen
Lägg till funktionen nedan till din <form>
-tagg. Denna funktion genererar ett doldt fält med namnet _token
och fyllt värde med token.
{{csrf_field()}}
Lägg till csrf_token ()
-funktionen till din dolda _token
i _token
. Detta genererar endast krypterad sträng.
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
.
Kontrollera sessionens lagringsväg och tillåtelse
Här antar jag att projekt-app-url är APP_URL=http://project.dev/ts/toys-store
- Ställ den skrivbara behörigheten till
storage_path('framework/sessions')
. - Kontrollera sökvägen för ditt laravelprojekt
'path' => '/ts/toys-store',
roten till ditt laravel-projekt. - Ändra namnet på din cookie
'cookie' => 'toys-store',
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'toys-store',
'path' => '/ts/toys-store',
'domain' => null,
'secure' => false,
'http_only' => true,
];
Använd _token-fältet på Ajax
Det finns många sätt att skicka _token
på AJAX-samtal
- Få alla inmatningsfältets värde inom
<form>
-taggen medvar formData = new FormData($("#cart-add")[0]);
- Använd
$("form").serialize();
eller$("form").serializeArray();
- Lägg till
_token
manuellt pådata
från Ajax. med$('meta[name="csrf-token"]').attr('content')
eller$('input[name="_token"]').val()
. - Vi kan ställa in som sidhuvud på ett visst Ajax-samtal som nedanför koden.
$.ajax({
url: $("#category-add").attr("action"),
type: "POST",
data: formData,
processData: false,
contentType: false,
dataType: "json",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});