Suche…


Einführung

Ich habe analysiert, dass das Verhältnis von TokenMismatch Error sehr hoch ist. Und dieser Fehler tritt aufgrund einiger dummer Fehler auf. Es gibt viele Gründe, aus denen Entwickler Fehler machen. Hier einige Beispiele, z. B. Kein _token für Kopfzeilen, Keine _token übergebenen Daten bei Verwendung von Ajax, Berechtigungsprobleme für den Speicherpfad, ein ungültiger Sitzungsspeicherpfad.

Setup-Token im Header

Setzen Sie das Token auf <head> Ihrer default.blade.php .

<meta name="csrf-token" content="{{csrf_token()}}">

Fügen Sie ajaxSetup oben in Ihr Skript ein, auf das von überall aus ajaxSetup werden kann. Dadurch werden bei jedem ajax Aufruf Kopfzeilen festgelegt

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

Token aktivieren
Etikett

Fügen Sie Ihrem <form> -Tag die folgende Funktion hinzu. Diese Funktion generiert ein verstecktes Feld mit dem Namen _token und einem mit dem Token gefüllten Wert.

{{csrf_field()}}

Fügen csrf_token () Funktion csrf_token () zu Ihrem verborgenen _token im value-Attribut hinzu. Dadurch wird nur eine verschlüsselte Zeichenfolge generiert.

<input type="hidden" name="_token" value="{{csrf_token()}}"/> .

Überprüfen Sie den Speicherpfad und die Berechtigung für die Sitzung

Hier APP_URL=http://project.dev/ts/toys-store ich davon aus, dass die Projekt-App-URL APP_URL=http://project.dev/ts/toys-store

  1. storage_path('framework/sessions') Sie die schreibbare Berechtigung auf storage_path('framework/sessions') den Ordner fest.
  2. Überprüfen Sie den Pfad Ihres Laravel-Projekts 'path' => '/ts/toys-store', die Wurzel Ihres Laravel-Projekts.
  3. Ändern Sie den Namen Ihres Cookies '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,
];

Verwenden Sie das Feld _token für Ajax

Es gibt viele Möglichkeiten, _token bei einem AJAX-Anruf zu senden

  1. var formData = new FormData($("#cart-add")[0]); Sie alle Werte des Eingabefelds im <form> -Tag mit var formData = new FormData($("#cart-add")[0]);
  2. Verwenden Sie $("form").serialize(); oder $("form").serializeArray();
  3. Fügen Sie _token manuell zu den data von Ajax hinzu. mit $('meta[name="csrf-token"]').attr('content') oder $('input[name="_token"]').val() .
  4. Wir können als Header für einen bestimmten Ajax-Aufruf wie im folgenden Code festlegen.
$.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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow