Zoeken…
Invoering
Ik heb geanalyseerd dat de verhouding tussen het krijgen van TokenMismatch-fouten erg hoog is. En deze fout treedt op vanwege enkele dwaze fouten. Er zijn veel redenen waarom ontwikkelaars fouten maken. Hier zijn enkele voorbeelden, dwz Geen _token op kopteksten, Geen _token gaf gegevens door bij gebruik van Ajax, machtigingsprobleem op opslagpad, een ongeldig sessieopslagpad.
Token instellen op koptekst
Zet het token op <head>
van uw default.blade.php
.
<meta name="csrf-token" content="{{csrf_token()}}">
Voeg ajaxSetup
aan de bovenkant van uw script, die overal toegankelijk is. Hiermee worden headers ingesteld voor elke ajax
oproep
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Zet token aan
Voeg de onderstaande functie toe aan uw <form>
-tag. Deze functie genereert een verborgen veld met de naam _token
en een gevulde waarde met het token.
{{csrf_field()}}
Voeg de functie csrf_token ()
aan uw verborgen _token
in het kenmerk value. Dit genereert alleen een gecodeerde string.
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
.
Controleer sessieopslagpad en toestemming
Hier neem ik aan dat de URL van de project-app APP_URL=http://project.dev/ts/toys-store
- Stel de schrijfbare machtiging in voor
storage_path('framework/sessions')
de map. - Controleer het pad van uw larvenproject
'path' => '/ts/toys-store',
de wortel van uw larvenproject. - Wijzig de naam van uw 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,
];
Gebruik het _token-veld op Ajax
Er zijn veel manieren om _token
te verzenden _token
AJAX-oproep
- Verkrijg de waarde van alle invoervelden in de
<form>
-tag metvar formData = new FormData($("#cart-add")[0]);
- Gebruik
$("form").serialize();
of$("form").serializeArray();
- Handmatig
_token
toevoegen aandata
van Ajax. met$('meta[name="csrf-token"]').attr('content')
of$('input[name="_token"]').val()
. - We kunnen instellen als koptekst voor een bepaalde Ajax-oproep zoals onderstaande code.
$.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')
}
});