Поиск…
Вступление
Я проанализировал, что отношение получения 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
- Задайте для записи доступ к
storage_path('framework/sessions')
. - Проверьте путь к вашему проекту laravel
'path' => '/ts/toys-store',
корень вашего проекта laravel. - Измените имя вашего 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
- Получите все значение поля ввода в
<form>
используяvar formData = new FormData($("#cart-add")[0]);
- Используйте
$("form").serialize();
или$("form").serializeArray();
- Добавьте
_token
вручную поdata
Ajax. используя$('meta[name="csrf-token"]').attr('content')
или$('input[name="_token"]').val()
. - Мы можем установить заголовок для конкретного вызова 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')
}
});