Ricerca…
introduzione
Ho analizzato che il rapporto di ottenere l'errore di TokenMismatch è molto alto. E questo errore si verifica a causa di alcuni errori stupidi. Ci sono molte ragioni per cui gli sviluppatori stanno commettendo errori. Ecco alcuni esempi, ad esempio No _token sulle intestazioni, No _token ha passato i dati quando si utilizza Ajax, il problema dei permessi sul percorso di archiviazione, un percorso di archiviazione delle sessioni non valido.
Token di installazione sull'intestazione
Imposta il token su <head>
del tuo default.blade.php
.
<meta name="csrf-token" content="{{csrf_token()}}">
Aggiungi ajaxSetup
nella parte superiore del tuo script, che sarà accessibile ovunque. Questo imposterà le intestazioni su ogni chiamata ajax
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Imposta il token
Aggiungi sotto la funzione al tuo tag <form>
. Questa funzione genererà un campo nascosto chiamato _token
e riempirà il valore con il token.
{{csrf_field()}}
Aggiungi la funzione csrf_token ()
al tuo _token
nascosto _token
value. Questo genererà solo la stringa crittografata.
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
.
Verifica il percorso di archiviazione della sessione e l'autorizzazione
Qui presumo che l'URL dell'app progetto sia APP_URL=http://project.dev/ts/toys-store
- Impostare la autorizzazione scrivibile su percorso_dellattazione
storage_path('framework/sessions')
della cartella. - Controlla il percorso del tuo progetto laravel
'path' => '/ts/toys-store',
la radice del tuo progetto laravel. - Cambia il nome del tuo 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,
];
Usa il campo _token su Ajax
Esistono molti modi per inviare _token
alla chiamata AJAX
- Ottieni tutto il valore del campo di input all'interno del tag
<form>
utilizzandovar formData = new FormData($("#cart-add")[0]);
- Usa
$("form").serialize();
o$("form").serializeArray();
- Aggiungi
_token
manualmente suidata
di Ajax. usando$('meta[name="csrf-token"]').attr('content')
o$('input[name="_token"]').val()
. - Possiamo impostare come header su una particolare chiamata Ajax come sotto il codice.
$.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')
}
});