Buscar..


Introducción

He analizado que la proporción de error de TokenMismatch es muy alta. Y este error se produce debido a algunos errores tontos. Hay muchas razones por las que los desarrolladores están cometiendo errores. Estos son algunos de los ejemplos, es decir, No _token en los encabezados, No _token pasó los datos cuando se usa Ajax, el problema de permisos en la ruta de almacenamiento, una ruta de almacenamiento de sesión no válida.

Configurar token en el encabezado

Establece el token en <head> de tu default.blade.php .

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

Agregue ajaxSetup en la parte superior de su script, que será accesible a todas partes. Esto establecerá los encabezados en cada llamada ajax

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

Establecer token en
etiqueta

Agregue la siguiente función a su etiqueta <form> . Esta función generará un campo oculto llamado _token y valor rellenado con el token.

{{csrf_field()}}

Agregue la función csrf_token () a su _token oculto en el atributo de valor. Esto generará solo cadena encriptada.

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

Compruebe la ruta de almacenamiento de la sesión y el permiso

Aquí asumo que la url de la aplicación del proyecto es APP_URL=http://project.dev/ts/toys-store

  1. Establezca el permiso de escritura en storage_path('framework/sessions') la carpeta.
  2. Verifique la ruta de su proyecto de laravel 'path' => '/ts/toys-store', la raíz de su proyecto de laravel.
  3. Cambie el nombre de su 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,
];

Utilice el campo _token en Ajax

Hay muchas formas de enviar _token en una llamada AJAX

  1. Obtenga todo el valor del campo de entrada dentro de la etiqueta <form> usando var formData = new FormData($("#cart-add")[0]);
  2. Utilice $("form").serialize(); o $("form").serializeArray();
  3. Añadir _token manualmente en los data de Ajax. utilizando $('meta[name="csrf-token"]').attr('content') o $('input[name="_token"]').val() .
  4. Podemos establecer como encabezado en una llamada Ajax particular como el código de abajo.
$.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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow