Recherche…


Introduction

J'ai analysé ce ratio pour obtenir une erreur TokenMismatch est très élevé. Et cette erreur se produit à cause de quelques erreurs stupides. Il existe de nombreuses raisons pour lesquelles les développeurs font des erreurs. Voici quelques exemples, par exemple No _token sur les en-têtes, No_token sur les données lors de l'utilisation d'Ajax, problème de permission sur le chemin de stockage, chemin de stockage de session non valide.

Configuration du jeton sur l'en-tête

Définissez le jeton sur <head> de votre default.blade.php .

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

Ajoutez ajaxSetup en haut de votre script, qui sera accessible partout. Cela va définir des en-têtes sur chaque appel ajax

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

Mettre le jeton sur
marque

Ajoutez la fonction ci-dessous à votre <form> . Cette fonction générera un champ masqué nommé _token et une valeur remplie avec le jeton.

{{csrf_field()}}

Ajoutez la fonction csrf_token () à votre _token caché dans l'attribut value. Cela ne générera que de la chaîne cryptée.

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

Vérifier le chemin de stockage de la session et l'autorisation

Ici, je suppose que l'URL de l'application du projet est APP_URL=http://project.dev/ts/toys-store

  1. Définissez l'autorisation en écriture sur storage_path('framework/sessions') le dossier.
  2. Vérifiez le chemin de votre projet laravel 'path' => '/ts/toys-store', la racine de votre projet laravel.
  3. Changez le nom de votre 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,
];

Utilisez le champ _token sur Ajax

Il y a plusieurs façons d'envoyer _token sur un appel AJAX

  1. Récupère toutes les valeurs du champ de saisie dans la <form> utilisant var formData = new FormData($("#cart-add")[0]);
  2. Utilisez $("form").serialize(); ou $("form").serializeArray();
  3. Ajoutez _token manuellement aux data d'Ajax. en utilisant $('meta[name="csrf-token"]').attr('content') ou $('input[name="_token"]').val() .
  4. Nous pouvons définir comme en-tête un appel Ajax particulier comme ci-dessous le 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow