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
etichetta

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

  1. Impostare la autorizzazione scrivibile su percorso_dellattazione storage_path('framework/sessions') della cartella.
  2. Controlla il percorso del tuo progetto laravel 'path' => '/ts/toys-store', la radice del tuo progetto laravel.
  3. 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

  1. Ottieni tutto il valore del campo di input all'interno del tag <form> utilizzando var formData = new FormData($("#cart-add")[0]);
  2. Usa $("form").serialize(); o $("form").serializeArray();
  3. Aggiungi _token manualmente sui data di Ajax. usando $('meta[name="csrf-token"]').attr('content') o $('input[name="_token"]').val() .
  4. 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')
    }
});


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow