Я потратил почти 2 дня, пытаясь решить эту проблему несоответствия токенов CSRF.
У меня есть приложение, работающее на laravel 4.2, и у него нет проблем с вызовами Ajax. Я переместил сайт на Laravel 6, но у меня проблемы со звонками Ajax. Я проверил исходный код сайта, и он имеет _token, а также запрос Ajax (X-CSRF-Token) в заголовке запроса. Оба они совпадают.
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="_token"]').attr('content')
}
});
Я настроил заголовок ajax для добавления токена в каждый вызов ajax.
При проверке проблемы в VerifyCsrfToken. php промежуточного программного обеспечения, я заметил, что 2 сравниваемых токена не совпадают.
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
Я проверил файлы сеансов в хранилище и заметил, что было создано несколько файлов сеансов, но каждый из них имел разное значение токена . Однако, по сравнению с кодом 4.2, все токены в файлах сеансов были одинаковыми.
Я не знаю, как работают эти файлы сеансов.
Мне интересно, каждый ли запрос сеанс должен хранить токен по-другому? Я неправильно храню Cook ie или есть что-то другое между версией 4.2 и версией 6.
Приветствуется любая помощь.