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
label

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

  1. Stel de schrijfbare machtiging in voor storage_path('framework/sessions') de map.
  2. Controleer het pad van uw larvenproject 'path' => '/ts/toys-store', de wortel van uw larvenproject.
  3. 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

  1. Verkrijg de waarde van alle invoervelden in de <form> -tag met var formData = new FormData($("#cart-add")[0]);
  2. Gebruik $("form").serialize(); of $("form").serializeArray();
  3. Handmatig _token toevoegen aan data van Ajax. met $('meta[name="csrf-token"]').attr('content') of $('input[name="_token"]').val() .
  4. 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')
    }
});


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow