Ich mache einen Ajax-Anruf, erhalte aber immer wieder den folgenden Fehler:
419 (unbekannter Status)
Keine Ahnung, was dies verursacht. Ich habe in anderen Posts gesehen, dass es etwas mit dem CSRF-Token zu tun hat, aber ich habe kein Formular, daher weiß ich nicht, wie ich das beheben soll.
Mein Anruf:
$('.company-selector li > a').click(function(e) {
e.preventDefault();
var companyId = $(this).data("company-id");
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '/fetch-company/' + companyId,
dataType : 'json',
type: 'POST',
data: {},
contentType: false,
processData: false,
success:function(response) {
console.log(response);
}
});
});
Meine Route:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Meine Controller-Methode
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
Das ultimative Ziel ist es, etwas aus der Antwort in einem HTML-Element anzuzeigen.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
in deinem Formular hinzugefügt ?{'_token': {{csrf_token()}}}
Antworten:
Verwenden Sie dies im Kopfbereich:
und erhalte das csrf-Token in Ajax:
Bitte beziehen Sie sich auf die Laravel-Dokumentation csrf_token
quelle
419 Unknown status
? Warum nicht419 Invalid CSRF token
oder eine vorhandene, nützliche Antwort? Woher kommt das? Warum? Usw.Eine andere Möglichkeit, dies zu beheben, besteht darin, das
_token
Feld in Ajax-Daten zu verwenden und den Wert{{csrf_token()}}
in Blade festzulegen. Hier ist ein Arbeitscode, den ich gerade an meinem Ende ausprobiert habe.quelle
Dies ähnelt Kannans Antwort. Dies behebt jedoch ein Problem, bei dem das Token nicht an domänenübergreifende Sites gesendet werden sollte. Dadurch wird der Header nur festgelegt, wenn es sich um eine lokale Anforderung handelt.
HTML:
JS:
quelle
Verwenden Sie dies auf Ihrer Seite
und in Ihrem Ajax verwendet es in Daten:
das ist:
Vielen Dank.
quelle
Möglicherweise stimmt Ihre Sitzungsdomäne nicht mit Ihrer App-URL und / oder dem Host überein, der für den Zugriff auf die Anwendung verwendet wird.
1.) Überprüfen Sie Ihre .env-Datei:
2.) Überprüfen Sie config / session.php
Überprüfen Sie die Werte, um sicherzustellen, dass sie korrekt sind.
quelle
Wenn Sie die obigen Vorschläge bereits gemacht haben und das Problem immer noch haben.
Stellen Sie sicher, dass die env-Variable:
Wird auf gesetzt,
false
wenn Sie kein SSL-Zertifikat haben, wie auf lokal.quelle
In meinem Fall habe ich vergessen, dem übermittelten Formular die Eingabe csrf_token hinzuzufügen. Also habe ich diesen HTML-Code erstellt:
JS:
quelle
<input type="hidden" id="_token" value="{{ csrf_token() }}">
ist notwendig, auch wenn wir einen Submit Whitouth Ajax machen, sonst habe ich einen seltsamen 419 FehlerAuch wenn Sie eine haben
csrf_token
, können Sie, wenn Sie Ihre Controller-Aktionen mit Laravel authentifizierenPolicies
, auch eine 419-Antwort erhalten. In diesem Fall sollten Sie IhrerPolicy
Klasse die erforderlichen Richtlinienfunktionen hinzufügen .quelle
Wenn Sie .js aus einer Datei laden, müssen Sie eine Variable mit dem csrf_token in Ihrer "main" .blade.php-Datei festlegen, in die Sie die .js importieren, und die Variable in Ihrem Ajax-Aufruf verwenden.
index.blade.php
anotherfile.js
quelle
einige refs =>
quelle
Serialisieren Sie einfach die Formulardaten und lösen Sie Ihr Problem.
quelle
Sie müssen das csrf-Token erhalten.
Nachdem das gleiche Problem aufgetreten ist, fügen Sie einfach dieses Meta-Tag hinzu
< meta name="csrf-token" content="{{ csrf_token() }}" >
Danach tritt auch der Fehler auf, Sie können den Ajax-Fehler überprüfen. Überprüfen Sie dann auch den Ajax-Fehler
quelle
quelle
2019 Laravel Update, Ich hätte nie gedacht, dass ich dies veröffentlichen werde, aber für Entwickler wie mich, die die Browser-Abruf-API auf Laravel 5.8 und höher verwenden. Sie müssen Ihr Token über den Parameter headers übergeben.
quelle
Ich hatte
SESSION_SECURE_COOKIE
auf true gesetzt, damit meineSESSION_SECURE_COOKIE=false
Entwicklungsumgebung beim Anmelden nicht funktionierte. Deshalb habe ich meine Entwickler-ENV-Datei hinzugefügt und alles funktioniert einwandfrei. Mein Fehler bestand darin, die Datei session.php zu ändern, anstatt die Variable zur ENV-Datei hinzuzufügen.quelle
Dieser Fehler tritt auch auf, wenn Sie vergessen haben, dies in Ihre Ajax-Übermittlungsanforderung (POST) aufzunehmen: contentType: false, processData: false,
quelle
Ich habe diesen Fehler erhalten, obwohl ich bereits ein CSRF-Token gesendet habe. Es stellte sich heraus, dass auf dem Server kein Speicherplatz mehr vorhanden war.
quelle
Dies funktioniert hervorragend in Fällen, in denen Sie kein Formular benötigen.
Verwenden Sie dies in der Kopfzeile:
und das in Ihrem JavaScript-Code:
quelle
Eine einfache Möglichkeit, einen unbekannten 419-Status auf Ihrer Konsole zu beheben, besteht darin, dieses Skript in Ihr FORMULAR einzufügen. {{csrf_field ()}}
quelle
Das hat bei mir funktioniert:
Danach stellen Sie den regulären AJAX-Aufruf ein. Beispiel:
quelle