Поиск…


Вступление

Я проанализировал, что отношение получения TokenMismatch Error очень велико. И эта ошибка возникает из-за некоторых глупых ошибок. Есть много причин, по которым разработчики делают ошибки. Вот некоторые из примеров, то есть No _token в заголовках, No _token передал данные при использовании Ajax, проблема разрешения на пути хранения, недопустимый путь хранения сеанса.

Установить токен в заголовке

Установите токен на <head> вашего default.blade.php .

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

Добавьте ajaxSetup в начало вашего скрипта, который будет доступен везде. Это задает заголовки для каждого вызова ajax

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

Установите токен на
тег

Добавьте функцию ниже в свой <form> . Эта функция будет генерировать скрытое поле с именем _token и заполнять значение с помощью токена.

{{csrf_field()}}

Добавьте csrf_token () в ваш скрытый _token в атрибуте value. Это создаст только зашифрованную строку.

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

Проверка пути хранения и разрешения сеанса

Здесь я предполагаю, что URL-адрес приложения проекта - APP_URL=http://project.dev/ts/toys-store

  1. Задайте для записи доступ к storage_path('framework/sessions') .
  2. Проверьте путь к вашему проекту laravel 'path' => '/ts/toys-store', корень вашего проекта laravel.
  3. Измените имя вашего 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,
];

Использовать поле _token на Ajax

Есть много способов отправить _token на вызов AJAX

  1. Получите все значение поля ввода в <form> используя var formData = new FormData($("#cart-add")[0]);
  2. Используйте $("form").serialize(); или $("form").serializeArray();
  3. Добавьте _token вручную по data Ajax. используя $('meta[name="csrf-token"]').attr('content') или $('input[name="_token"]').val() .
  4. Мы можем установить заголовок для конкретного вызова Ajax, например, кода ниже.
$.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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow