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
märka

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

  1. Ställ den skrivbara behörigheten till storage_path('framework/sessions') .
  2. Kontrollera sökvägen för ditt laravelprojekt 'path' => '/ts/toys-store', roten till ditt laravel-projekt.
  3. Ä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

  1. Få alla inmatningsfältets värde inom <form> -taggen med var formData = new FormData($("#cart-add")[0]);
  2. Använd $("form").serialize(); eller $("form").serializeArray();
  3. Lägg till _token manuellt på data från Ajax. med $('meta[name="csrf-token"]').attr('content') eller $('input[name="_token"]').val() .
  4. 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')
    }
});


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow