Je fais un appel ajax mais j'obtiens toujours cette erreur:
419 (état inconnu)
Aucune idée de la cause de cela, j'ai vu sur d'autres messages, il doit faire quelque chose avec le jeton csrf mais je n'ai pas de formulaire, donc je ne sais pas comment résoudre ce problème.
mon appel:
$('.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);
}
});
});
Mon itinéraire:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Ma méthode de contrôleur
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
Le but ultime est d'afficher quelque chose de la réponse dans un élément html.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
dans votre formulaire ??{'_token': {{csrf_token()}}}
Réponses:
Utilisez ceci dans la section principale:
et obtenez le jeton csrf en ajax:
Veuillez consulter la documentation Laravel csrf_token
la source
419 Unknown status
? Pourquoi pas419 Invalid CSRF token
ou une réponse existante et utile? D'où est ce que ça vient? Pourquoi? EtcUne autre façon de résoudre ce problème consiste à utiliser le
_token
champ dans les données ajax et à définir la valeur de{{csrf_token()}}
in blade. Voici un code fonctionnel que je viens d'essayer à ma fin.la source
Ceci est similaire à la réponse de Kannan. Cependant, cela résout un problème où le jeton ne doit pas être envoyé à des sites interdomaines. Cela ne définira l'en-tête que s'il s'agit d'une demande locale.
HTML:
JS:
la source
utilisez ceci dans votre page
et dans votre ajax utilisé dans les données:
C'est:
Merci.
la source
Il est possible que votre domaine de session ne corresponde pas à l'URL de votre application et / ou à l'hôte utilisé pour accéder à l'application.
1.) Vérifiez votre fichier .env:
2.) Vérifiez config / session.php
Vérifiez les valeurs pour vous assurer qu'elles sont correctes.
la source
Si vous avez déjà fait les suggestions ci-dessus et que vous rencontrez toujours le problème.
Assurez-vous que la variable env:
Est défini sur
false
si vous n'avez pas de certificat SSL, comme sur local.la source
dans mon cas, j'ai oublié d'ajouter l'entrée csrf_token au formulaire soumis. alors j'ai fait ce HTML:
JS:
la source
<input type="hidden" id="_token" value="{{ csrf_token() }}">
est nécessaire même si nous faisons une soumission whitouth ajax, sinon j'ai eu une erreur 419 bizarreMême si vous avez un
csrf_token
, si vous authentifiez les actions de votre contrôleur à l'aide de Laravel,Policies
vous pouvez également avoir une réponse 419. Dans ce cas, vous devez ajouter les fonctions de stratégie nécessaires dans votrePolicy
classe.la source
Si vous chargez .js depuis un fichier, vous devez définir une variable avec le csrf_token dans votre fichier "principal" .blade.php où vous importez le .js et utilisez la variable dans votre appel ajax.
index.blade.php
anotherfile.js
la source
quelques refs =>
la source
sérialisez simplement les données du formulaire et résolvez votre problème.
la source
Vous devez obtenir le jeton csrf.
Après avoir fait le même problème, il suffit d'ajouter cette balise meta
< meta name="csrf-token" content="{{ csrf_token() }}" >
Après cela, l'erreur se produit également, vous pouvez vérifier l'erreur Ajax. Ensuite, vérifiez également l'erreur Ajax
la source
la source
Mise à jour de Laravel 2019, je n'aurais jamais pensé publier cela, mais pour les développeurs comme moi, utilisant le navigateur, récupérez l'api sur Laravel 5.8 et supérieur. Vous devez transmettre votre jeton via le paramètre headers.
la source
J'avais
SESSION_SECURE_COOKIE
réglé sur true, donc mon environnement de développement ne fonctionnait pas lors de la connexion, donc j'ai ajoutéSESSION_SECURE_COOKIE=false
à mon fichier dev .env et tout fonctionne bien.Mon erreur a été de changer le fichier session.php au lieu d'ajouter la variable au fichier .env.la source
Cette erreur se produit également si vous avez oublié d'inclure ceci, dans votre demande de soumission ajax (POST), contentType: false, processData: false,
la source
Vous avez cette erreur même si j'avais déjà envoyé un jeton csrf. Il s'est avéré qu'il n'y avait plus d'espace libre sur le serveur.
la source
Cela fonctionne très bien pour les cas où vous n'avez pas besoin d'un formulaire.
utilisez ceci dans l'en-tête:
et ceci dans votre code JavaScript:
la source
Un moyen simple de corriger un statut inconnu 419 sur votre console est de mettre ce script à l'intérieur de votre FORMULAIRE. {{csrf_field ()}}
la source
Cela a fonctionné pour moi:
Après ce set appel AJAX régulier. Exemple:
la source