#php #ajax #laravel
Вопрос:
Итак, я использовал jQuery для подключения к функции контроллера, которая проверяет подлинность данных и отправляет их через AJAX, используя этот код. Это работало безупречно, пока я не взял выходной в субботу. Возвращаясь вчера к проекту, я продолжаю сталкиваться с этой ошибкой с кодом HTTP 419
"message": "CSRF token mismatch.",
"exception": "Symfony\Component\HttpKernel\Exception\HttpException",
"file": "C:\workspace\app_name\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php",
"line": 387,
Поэтому я попытался повторить маркер CSRF, но он пуст! Имейте в виду, что он отлично работал в пятницу, а затем наступило воскресенье (вчера), без внешнего ввода, это просто случайно поразило меня этим. В чем может быть причина того, что он не генерирует токен?
Комментарии:
1. HTTP-код 419 используется платформой Laravel, когда токен CSRF отсутствует или истек срок действия.
2. Прежде всего, спасибо, что нашли время. Если срок действия токена истекает, как я могу его восстановить?
3. попробуйте ключ php artisan:сгенерируйте
4. Привет, Джон, это используется для создания ключа приложения в файле .env, верно? Я все еще пробовал, но, к сожалению, ничего не вышло.
5. Хорошо. как только вы попробуете использовать другой браузер или очистите кэш браузера . также попробуйте php artisan view:очистить конфигурацию php artisan:очистить
Ответ №1:
Хорошо, поэтому я просто быстро добавил этот код в свой код незадолго до окончания рабочего дня, поэтому у меня не было времени на тестирование, поэтому я не заметил ошибку.
$request->session()->flush();
Эта строка кода отвечает за очистку сеансов. Однако в документах Laravel НЕ упоминается, что, поскольку токены CSRF также являются сеансами, использование этого в основном делает невозможным ввод-вывод в ваши базы данных, поскольку он очищает ВСЕ сеансы, включая указанные токены. Поэтому, пока это не будет решено (в идеале с помощью фрагмента кода, который очищает созданные разработчиками сеансы, сохраняя при этом встроенные сеансы Laravel), избегайте использования этой строки кода. Вместо этого используйте это для очистки отдельных сеансов:
// Forget a single key...
$request->session()->forget('name');
Или это для очистки нескольких сеансов
// Forget multiple keys...
$request->session()->forget(['name', 'status']);
Вы также можете узнать больше о сессиях этого прекрасного фреймворка здесь.
Наконец, спасибо @Indra Kumar S, @John Lobo, @Manjeet и @Paras Raiyani за то, что нашли время просмотреть платформу и предложить помощь другим. Определенно буду делать то же самое.
Ответ №2:
Выполните следующие команды :
php artisan key:generate
а затем очистите кэш
php artisan cache:clear
Если вы хотите узнать, меняется ли значение токена, попробуйте выполнить приведенный ниже код
Route::get('/token', function (Request $request) {
$token = $request->session()->token();
echo $token;
$token = csrf_token();
echo $token;
});
Комментарии:
1. Большое вам спасибо за предложение @Manjeet. Я только что нашел решение, и это было результатом моего невежества..
2. Рад, что вы нашли решение 🙂