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
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
-
storage_path('framework/sessions')
Sie die schreibbare Berechtigung aufstorage_path('framework/sessions')
den Ordner fest. - Überprüfen Sie den Pfad Ihres Laravel-Projekts
'path' => '/ts/toys-store',
die Wurzel Ihres Laravel-Projekts. - Ä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
-
var formData = new FormData($("#cart-add")[0]);
Sie alle Werte des Eingabefelds im<form>
-Tag mitvar formData = new FormData($("#cart-add")[0]);
- Verwenden Sie
$("form").serialize();
oder$("form").serializeArray();
- Fügen Sie
_token
manuell zu dendata
von Ajax hinzu. mit$('meta[name="csrf-token"]').attr('content')
oder$('input[name="_token"]').val()
. - 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')
}
});