Я установил Laravel 5.7
Добавил форму в файл \resources\views\welcome.blade.php
<form method = "POST" action = "/foo" >
@csrf
<input type = "text" name = "name"/><br/>
<input type = "submit" value = "Add"/>
</form>
Добавлен в файл \routes\web.php
Route::post('/foo', function () {
echo 1;
return;
});
После отправки запроса POST:
419 Sorry, your session has expired. Please refresh and try again.
В версии 5.6 такой проблемы не было.
У меня такая же проблема. Когда я переключаюсь на сеанс базы данных, это происходит, и когда я возвращаюсь к file для SESSION_DRIVER в .env, он работает нормально. Почему не работает сеанс на основе базы данных.
Я скопировал ваш точный код в новую установку laravel 5.7. Это сработало. Проблема в другом.
эта проблема из-за проблемы с токеном. Я пытался запустить такой же код, но без ошибок. Вы должны предоставить больше информации, например, о вашем драйвере сеанса, отображении значения _token в форме. Кроме того, вы можете отладить себя в этом файле vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php, строка 67, чтобы узнать, почему
Я понял, что использовал стол sessions для другой цели. После изменения имени этой таблицы на более подходящее, запуска artisan session:table и обновленной миграции все работает нормально.
Я проверил ваш код и не обнаружил никаких проблем. Предупреждающего сообщения не было, а эхо-сигнал 1 был точным. Я также использую laravel 5.7
Предполагается, что сеансы истекают, поэтому просто проверьте очевидный вопрос - как долго была открыта форма, прежде чем вы ее отправили? Какое значение имеет lifetime в config/session.php?
Поскольку автор ОП не вмешался и не сказал, что решило его проблему. Я вижу здесь множество решений, которые не решили мою проблему. Я решил это по-другому, поэтому я думаю, что ни один ответ не является правильным. Все они могут быть правильными в разных сценариях. Следовательно, я держу свое предложение о вознаграждении.
Вы можете добавить ответ, который решил вашу проблему, если он не упоминается здесь в каких-либо ответах (потому что это не имеет смысла). И в соответствии с тем, какой ответ вам понравился больше всего / больше подходит для будущих OP, вы можете наградить награду. потому что вы не можете получить обратно награды ни при каких обстоятельствах






Это потому, что для формы требуется csrf. В версии 5.7 поменяли на @csrf
<form action = "" method = "post">
@csrf
...
Референт: https://laravel.com/docs/5.7/csrf
Его форма включает токен csrf. Не уверен, редактировал он это позже или нет.
да, в его форме изначально есть поле csrf, я только что заглянул в историю редактирования
Это не решает проблему и в моем случае, так как она всегда есть в моей форме, но я начал сталкиваться с ошибкой из-за некоторых других изменений.
даже с установленным csrf я получаю ту же ошибку ...
У меня была точно такая же проблема, и я был совершенно глуп. Я отключил все поля формы (а не только кнопку отправки) через javascript перед отправкой указанной формы! Это, конечно, привело к тому, что все элементы формы не были отправлены (включая скрытое поле _token), что, в свою очередь, привело к ошибке 419!
Надеюсь, это поможет кому-то от нескольких часов чесания головы!
Как насчет использования
{{ csrf_field() }} вместо @csrf
Ошибка 419 в основном связана с проблемами с токеном csrf.
Вы имеете ввиду {{ csrf_field() }}?
Он генерирует тот же html, что и @csrf, с таким же результатом
В вашем Http/Kernel.php
попробуйте прокомментировать эту строку:
\Illuminate\Session\Middleware\AuthenticateSession::class,
в вашем веб-массиве промежуточного программного обеспечения
это может быть корнем вашей проблемы
Это может показаться излишним, но вы можете попробовать следующее:
// Форма вызова маршрута названный с добавленным полем скрытого токена.
<form method = "POST" action = "{{ route('foo') }}" >
@csrf
<input type = "hidden" name = "_token" value = "{!! csrf_token() !!}">
<input type = "text" name = "name"/><br/>
<input type = "submit" value = "Add"/>
</form>
// Маршрут Именованный
Route::post('/foo', function () {
return 'bar';
})->name('foo');
// Добавьте это в блок <head></head>:
<meta name = "_token" content = "{!! csrf_token() !!}" />
Я тестировал его на своем локальном компьютере, используя Homestead на Laravel 5.7, который был свежей установкой с использованием Laravel Installer 2.0.1, и он работал. Какая у вас среда?
Теория: мне интересно, связано ли это с рендерингом HTML-тегов лезвиями с {{ }} по сравнению с {!! !!} в вашей среде или с тем, как вы ее обслуживаете (например, php artisan serve). Что заставляет меня думать, что line 335 из /vendor/laravel/framework/src/illuminate/Foundation/helpers.php должен отображать ту же строку, введенную вручную выше.
Да, круто, но теги <meta> следует размещать внутри <head>, а не внутри <body>. Я не уверен, что валидатору HTML это понравится.
Я бы сказал, что вы правы, и это следует коснуться головы.
У меня тоже была такая проблема, и я обнаружил, что файлы сеанса заблокированы для записи. Итак, я не знаю, запускаете ли вы свой Laravel через такие вещи, как vagrant или Docker, но я советую вам попробовать изменить права каталога сеанса (и, конечно, файлов) (когда вы запускаете Laravel на виртуальной машине, вы должны изменить права локально и в виртуальной машине (например, когда вы делитесь файлами через NFS)
Нравится:
chmod -R 777 storage/framework/sessions
chmod -R 777 storage/logs
Я знаю, разрешение 777 - худшая катастрофа, которую вы можете себе представить. Но они удобны для устранения неполадок.
Чтобы быть уверенным, что я никогда этого не забуду, я сделал bash-скрипт. (Назвал его lalog, просто потому, что я хотел очистить файлы журнала и установить разрешения)
Примечание: Убедитесь, что вы используете это в каталоге сеанса. В config / session.php объявлен ключ files с указанием местоположения. В моем случае:
<?php
//...........
'files' => storage_path('framework/sessions'),
//...........
Расположение: / usr / bin / lalog (Это файл, а не каталог)
Выполнить в оболочке как lalog
#!/bin/bash
rm -rf /home/username/Projects/x/storage/logs/laravel.log
echo "Laravel log removed"
touch /home/username/Projects/x/storage/logs/laravel.log
echo "Laravel log created"
chmod -R 777 /home/username/Projects/x/storage/
echo "CHMOD 777 on Storage dir"
Предупреждение! Это предоставит доступ для записи всем, так что будьте осторожны! Также, возможно, в файле журнала Laravel есть некоторая полезная информация. (обязательно загляните в этот файл журнала перед запуском моего сценария bash)
Кроме того, я знаю, что это уже упоминалось. Но будьте абсолютно уверены, что вы всегда
@csrf в своем блейд-файле.Форма должна быть примерно такой
<form method = "POST" action = "{{ route('login') }}">
@csrf
.......
</form>
Вы не можете сделать пустой возврат на Laravel 5.6 или выше. Laravel всегда ожидает возврата значения. (Знаю по прошлому опыту). В основном это связано с тем, как PHP 7 обрабатывает пустые возвраты.
Вы неправильно добавили поле CSRF. Вместо @csrf вы должны использовать csrf_field() вот так:
<form method = "POST" action = "/foo" >
{{ csrf_field() }}
<input type = "text" name = "name"/><br/>
<input type = "submit" value = "Add"/>
</form>
В коде нет проблем. Я проверил тот же код, что и вы, при новой установке.
Код формы:
<form method = "POST" action = "/foo" >
@csrf
<input type = "text" name = "name"/><br/>
<input type = "submit" value = "Add"/>
</form>
Код файла web.php:
Route::get('/', function () {
return view('welcome');
});
Route::post('/foo', function () {
echo 1;
return;
});
Результат после отправки формы:

Если вы очистите кеш браузера или попытаетесь использовать другой браузер, я думаю, это будет исправлено.
Быстрый плохой подход - перейти в app \ http \ middleware \ verifycsrftoken.php и добавить маршрут в список $ except. Почтовый запрос будет проигнорирован для проверки токена CSRF.
protected $except = [
//
'doLogin.aspx',
'create_coupon',
];
На самом деле CSRF - это токен на основе сеанса. Добавьте свой маршрут в группу маршрутов и добавьте промежуточное ПО, которое управляет сеансами.
web - это промежуточное ПО по умолчанию в laravel, которое может управлять запросами сеанса.
Route::group(array('middleware' => ['web']), function () {
Route::post('/foo', function () {
echo 1;
return;
});
});
Перед чтением ниже убедитесь, что у вас есть @csrf или {{ csrf_field() }} в вашей форме.
нравиться
<form method = "post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Сообщение об ошибке Session Expired или 419 Page Expired в Laravel появляется, потому что где-то происходит сбой проверки вашего токена csrf, что означает, что промежуточное ПО App\Http\Middleware\VerifyCsrfToken::class уже включено. В форме уже добавлена директива лезвия @csrf, что тоже должно быть хорошо.
Затем другая область для проверки - это сеанс. Проверка токена csrf напрямую связана с вашим сеансом, поэтому вы можете проверить, работает ли ваш драйвер сеанса или нет, например, неправильно настроенный Redis может вызвать проблему.
Возможно, вы можете попробовать переключить драйвер / программное обеспечение сеанса из файла .env, поддерживаемые драйверы приведены ниже.
Поддерживаемые драйверы сессий в Laravel 5, Laravel 6 и Laravel 7(Ссылка на документ)
file - сессии хранятся в хранилище / framework / sessions.cookie - сеансы хранятся в безопасных зашифрованных файлах cookie.database - сеансы хранятся в реляционной базе данных.memcached / redis - сеансы хранятся в одном из этих быстрых хранилищ на основе кеша.array - сеансы хранятся в массиве PHP и не сохраняются.Если ваша форма работает после переключения драйвера сеанса, значит, с этим конкретным драйвером что-то не так, попробуйте исправить ошибку оттуда.
Возможные сценарии с высокой вероятностью ошибок
Вероятно, сеансы на основе файлов могут не работать из-за проблем с разрешениями в каталоге /storage (быстрый поиск в Google даст вам решение), также помните, что установка 777 для каталога никогда не является решением.
В случае драйвера базы данных ваше соединение с БД может быть неправильным, или таблица sessions может не существовать или неправильно настроена (неправильная часть конфигурации была подтверждена как проблема в соответствии с комментарием @Junaid Qadir).
Конфигурация redis/memcached неверна или одновременно обрабатывается другим фрагментом кода в системе.
Было бы неплохо выполнить php artisan key:generate и сгенерировать новый ключ приложения, который, в свою очередь, сбрасывает данные сеанса.
Очистить кеш браузера ЖЕСТКИЙ, я обнаружил, что Chrome и Firefox виноваты больше, чем я могу вспомнить.
Узнайте больше о том, почему важны ключи приложений
Иногда просто браузеры, в основном Chrome, не помещают значение сеанса Set-Cookie, потому что оно искажено или нестандартно. Таким образом, Laravel не найдет никакого существующего значения сеанса из HTTP-запроса для сравнения с полученным значением _token из FORM. Избегайте использования SESSION_DOMAIN=... с IP, который Chrome и Спецификации файлов cookie HTTP считают небезопасным.
У меня такая же проблема, но я не получаю сообщение об ошибке постоянно. Просто время от времени это происходит. Думаю, это означает, что с драйвером сеанса проблем нет, потому что он работает 99% времени. Но я использую живое приложение и время от времени получаю жалобы от клиентов. Однако это очень редко. Я использую драйвер файлового сеанса. Кто-нибудь знает, почему это происходит в моем случае? Спасибо
@ TheAngelM97 Вы можете легко воспроизвести эту ошибку, перейдя либо на страницу входа в систему, либо на страницу регистрации. Не делайте ничего больше 30 минут. Затем, когда вы нажимаете на «Отправить», появляется 419 Page Expired. Для удобства использования, как рассказать простому пользователю о том, что только что произошло, и как это решить?
По умолчанию у меня не было этой проблемы. Итак, что я сделал, это chmod -R 644 sessions
воспроизвести проблему.
Впоследствии я дал разрешения на папку сессий с помощью chmod -R 755 sessions
теперь мой код проекта снова работает.
Причина, по которой это происходит, заключается в том, что вы храните кеш в файле без записи разрешения.
The session configuration file is stored at config/session.php. Be sure to review the options available to you in this file. By default, Laravel is configured to use the file session driver, which will work well for many applications. In production applications, you may consider using the memcached or redis drivers for even faster session performance.
Решения:
1 - Как я исправил выше, вы можете дать 755 разрешений для папки сессий. 2 - Вы можете использовать другую конфигурацию драйвера сеанса.
file - sessions are stored in storage/framework/sessions. cookie - sessions are stored in secure, encrypted cookies. database - sessions are stored in a relational database. memcached / redis - sessions are stored in one of these fast, cache based stores. array - sessions are stored in a PHP array and will not be persisted.
Имей в виду; Если вы хотите использовать memcached / redis, вам необходимо, чтобы они были установлены на вашем сервере, или ваш контейнер docker redis должен быть запущен.
У меня была аналогичная проблема, и я нашел решение этого
если вы выводите эхо или печатаете что-то с контроллера, пока вы вернетесь к просмотру, эта проблема появится.
поэтому убедитесь, что вы не используете эхо или печать, когда ваш контроллер вернется
На самом деле это ничего не добавляет к существующим ответам.
Попробуйте закомментировать \App\Http\Middleware\EncryptCookies::class в \app\Http\Kernel.php
У меня похожая проблема, и я решил ее.
Наверное, не лучшее решение из-за безопасности, но, по крайней мере, оно работало.
Раньше я пробовал:
\App\Http\Middleware\VerifyCsrfToken::class в \app\Http\Kernel.php\Illuminate\Session\Middleware\AuthenticateSession::class в \app\Http\Kernel.phpНо ничего из вышеперечисленного у меня не сработало.
РЕДАКТИРОВАТЬ
В моем случае каждый раз, когда я вхожу в систему, создается новый файл сеанса (старый файл все еще сохраняется, но внезапно забывается. Проверьте storage/framework/sessions) и генерируется новый токен CSRF. Так что проблема не в VerifyCsrfToken.
Как @Vladd упомянул в разделе комментариев, вы должны никогда закомментировать \App\Http\Middleware\VerifyCsrfToken::class. Вы должны убедиться, что отправили правильный CSRF TOKEN на сервер.
Среди упомянутых вами способов у меня сработало только комментирование \ App \ Http \ Middleware \ VerifyCsrfToken :: class в \ app \ Http \ Kernel.php.
Очистить кеш, создать новый ключ приложения + удалить файлы cookie
Вы никогда не должны изменять класс \ App \ Http \ Middleware \ VerifyCsrfToken :: class. Почему ты бы так поступил? Чтобы создать себе слабое место в приложении?
@dobs Спасибо за добавление '+ Remove Cookies', потому что я получал ошибку 419 даже после того, как сделал все, что мог, и это сработало только тогда, когда я очистил куки браузера / попробовал в инкогнито.
Просто скажу, что у меня были те же проблемы. В моей местной усадьбе он будет работать, как ожидалось, но после отправки на сервер разработки я также получил сообщение о тайм-ауте сеанса. Поняв, что это проблема с окружающей средой, я перешел с apache на nginx, и это чудесным образом решило проблему.
Я использую Laravel 5.7 У меня была такая же проблема, потому что токен csrf не был в форме, поэтому добавление
@csrf
исправил проблему
case 1 : if you are running project in your local system like 127.0.01:8000 ,
тогда
добавьте SESSION_DOMAIN= в ваш файл .env
или в вашем config / session.php 'domain' => env('SESSION_DOMAIN', ''),
а затем запустите php artisan cache:clear
case 2: if project is running on server and you have domain like "mydomain.com"
добавьте SESSION_DOMAIN=mydomain.com в ваш файл .env
или в вашем config / session.php 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
а затем запустите php artisan cache:clear
мне помогло, спасибо!
измените свой @csrf в welcome.blade.php на <input type = "hidden" name = "_token" value = "{{ csrf_token() }}">
так что ваш код такой:
<form method = "POST" action = "/foo" >
<input type = "hidden" name = "_token" value = "{{ csrf_token() }}">
<input type = "text" name = "name"/><br/>
<input type = "submit" value = "Add"/>
<button type = "submit">Submit</button>
</form>
У меня эта проблема возникла давно. Я вспомнил, что это вызывает разрешение storage/framework/sessions. Вы можете изменить его с помощью команды chmod -R 0777 storage/framework/sessions. У меня это сработало.
Просто измените .env
SESSION_DRIVER=cookie
Спустя столько времени я решил это таким образом
Мой путь установки laravel не совпадал с указанным в файле конфигурации session.php
'domain' => env('SESSION_DOMAIN', 'example.com'),
В моем случае это очень смешно. Я получаю ошибку 419, когда помещаю Auth::routes() в начало файла маршрута.
Auth::routes();
Route::middleware('auth')->group(function () {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
И я исправил ошибку, переместив Auth::routes(); в конец файла маршрута.
Route::middleware('auth')->group(function () {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
Auth::routes();
Может быть, это поможет и твоему делу. Удачи.
Обратите внимание, что вы получаете ошибку 419, если пытаетесь загрузить большой файл, размер которого превышает ограничение на размер почтового файла. В этом случае вы можете увеличить и upload_max_filesize, и post_max_size до разумной суммы (например, 10M или 20M в зависимости от вашего варианта использования и ресурсов), проверьте здесь: https://stackoverflow.com/a/2184541/2100489
Но это может вызвать проблемы с потреблением ресурсов, например с пропускной способностью и хранилищем. В качестве решения вы можете проверить размер файла перед отправкой формы и показать предупреждающее сообщение.
419 | страница эта ошибка означает проблему безопасности laravel, это означает, что поле токена csrf используется неправильно.
использовать {{csrf_field}}
и ваш вопрос будет решен.
добавьте токен csrf и ваша проблема будет решена. {{csrf_token}} или @csrf
Это может быть проблема с вашей сессией. Поигравшись с этими настройками, я решил свою проблему. Для меня это оказался последний вариант.
Источник: Сессия Laravel всегда изменяет каждое обновление / запрос в Laravel 5.4
Да, после многих других попыток переключатель SESSION_SECURE_COOKIE (поменял его на false) сделал это за меня. (на localhost:8000)
SESSION_SECURE_COOKIE также был проблемой для меня, я изменил его, следуя руководству по оптимизации веб-сайта.
для меня он работает с https, но не с http ... любая идея, почему? спасибо за отличный ответ, мне потребовались часы, чтобы найти его.
Я просто хочу сказать, убедитесь, что токен csrf сгенерирован, иногда это просто пустой массив, например, в форме повторителя, если вы не генерируете внутри js-запроса.
Если у вас уже есть директива csrf, возможно, вы изменили способ запуска сеансов.
В config/session.php проверьте поле 'безопасный'. Он должен быть установлен на false, если https недоступен на вашем сервере.
Вы также можете поместить SESSION_SECURE_COOKIE=FALSE в ваш файл .env (корневой каталог).
У меня была такая же проблема в моей среде разработки. Это было решено с использованием http://127.0.0.1:8000 вместо http://localhost:8000.
В моем случае удаление bootstrap/cache устранило проблему.
Для меня ошибка возникает, когда сеанс становится недействительным, и пользователь пытается отправить почтовый запрос. Csrf_token больше не действительны. поэтому я преодолеваю это, изменяя Handler.php в каталоге исключений и пытаюсь поймать исключение несоответствия токена, подобное этому.
Функция рендеринга была такой
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
Затем я модифицирую его, чтобы он выглядел так
public function render($request, Exception $exception)
{
if ($exception instanceof \Illuminate\Session\TokenMismatchException){ // <<<=========== the Code
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect('/home')->with('message', 'You page session expired. Please try again');
}
return parent::render($request, $exception);
}
Просто вы выбираете маршрут, который может обрабатывать операцию обновления токена.
Чтобы решить эту ошибку, вам сначала нужно вставить одну из следующих команд в тег формы.
@csrf ИЛИ {{ csrf_field }}
Если ваша проблема не решена, сделайте следующее: (Обратите внимание, что одна из вышеперечисленных команд должна быть в теге формы)
1. вставьте одну из следующих команд в тег формы
@csrf ИЛИ {{ csrf_field }}
2. Откройте файл .env и измените значения на «файл» в разделе SESSION_DRIVER.
3. Затем вам следует сбросить кеш laravel. введите ниже команды в терминале
php artisan view:clearphp artisan route:clearphp artisan cache:clear
php artisan config:cache
4. На последнем этапе отключите проект от сервера и снова нажмите на php artisan serve.
Надеюсь твоя проблема решена
Добавьте в свою форму на .blade.php файл {{ csrf_field() }} или @csrf вот так
<form method='POST' action='route("exampleRoute")'>
{{ csrf_field() }} or @csrf
....
....
</form>
Чем отличается ваш ответ от существующих ответов?
откройте командную строку cmd в вашем проекте.
1. команда
php artisan config:cache
2. команда
php artisan route:clear
У вас тоже есть csrf в шапке вашего приложения?
<meta name = "csrf-token" content = "{{ csrf_token() }}">
какая-то строка кода в app / Exceptions / Handler.php решила мою проблему.
public function render($request, Exception $exception)
{
if ($exception instanceof Illuminate\Session\TokenMismatchException) {
Artisan::call('cache:clear');
Artisan::call('config:cache');
return Redirect::back();
}
return parent::render($request, $exception);
}
в моем случае другой пользователь-администратор вошел в систему с моей админ-панелью и не может войти в систему с новым laravel / ui auth и 419 уволен.
Решение:
используйте вкладку инкогнито и откройте новую вкладку, а затем проверьте ее снова.
Это должно сработать, если вы попробуете все эти шаги:
Убедитесь, что ваш сеанс правильно настроен, самый простой способ - сделать его файловым и убедиться, что папка хранилища имеет разрешение chmod 755, а затем в вашем .env вы установите его, как показано ниже, драйвер сеанса файла - самый простой способ установить.
SESSION_DRIVER=file
SESSION_DOMAIN=
SESSION_SECURE_COOKIE=false
Убедитесь, что папка Cache очищена и доступна для записи, вы можете сделать это, выполнив команду artisan ниже.
php artisan cache:clear
Убедитесь, что права доступа к папке установлены правильно, они должны быть настроены, как показано ниже:
sudo chmod -R 755 storage
sudo chmod -R 755 vendor
sudo chmod -R 644 bootstrap/cache
Убедитесь, что в вашей форме есть токен @csrf.
Надеюсь, это решит вашу проблему.
настройка разрешений sudo полностью разбила мой laravel.
Это то, что у меня сработало. в моем случае я столкнулся с проблемой, когда пытаюсь работать на хосте вместо localhost.
Хотя в форме есть @csrf, он все еще показывает 419 pages has expired
Я решил это после обновления опции SESSION_SECURE_COOKIE до false в config / session.php
'secure' => env('SESSION_SECURE_COOKIE', false)
чем очистить кеш
Перейдите в config / sessions.php
найти строку
'secure' => env('SESSION_SECURE_COOKIE', true),
измените его на false
'secure' => env('SESSION_SECURE_COOKIE', false),
Если для этого параметра установлено значение TRUE, браузер потребует от вас использовать протокол HTTPS, в противном случае он не будет сохранять сеанс. Поскольку это не действует
Я попробовал все ответы, представленные здесь. Однако ни один из них не работал у меня на виртуальном хостинге. Однако упомянутый здесь соултион работает для меня Как решить "несоответствие токенов CSRF" в Laravel l
Я просто просмотрел это и завис здесь в поисках ответа ... В моем случае решение было очистить историю браузера.
В моем случае отсутствовал ?> в конце routes / web.php.
то же самое, забыл добавить ?> в конец web.php
ВОТ ЭТО ДА. Не совсем та же проблема в моем случае, но ваше решение заставило меня проверить это, и когда я это сделал, я заметил пробел до в теге открытие<?php, и это то, что вызывало 419 в каждой форме на сайте! Как ни странно, этого не произошло с PHP 7.3, а началось после обновления до 7.4!
Это сработало и для меня
Фактически, простое добавление / удаление абзаца из этого файла имеет тот же эффект.
В моем случае я очищал все входные данные с помощью javascript перед открытием формы, встроенной в модальное представление. По глупости, я не заметил, как он стирает значения входов hidden, в том числе токен csrf. Несмотря на исключение в моем условном для входов с name='_token'. Конечно, мой код был splitting - имена входов с подчеркиванием в массивы.
Пришлось сделать исключение для входов hidden.
Если вы добавили @csrf, то также возникает ошибка, убедитесь, что вы не заблокировали файлы cookie ...
Нажмите на Cookies и разрешите ссылку!
В 2021 году я столкнулся с этой ошибкой при применении всех вышеперечисленных решений, каждый мой маршрут выдавал 419. Мое приложение работало нормально на локальном хосте, но 419 на сервере.
Затем я получил решение при исправлении файла .env на производстве, remove sanctum variables из .env и установил 'secure' => env('SESSION_SECURE_COOKIE', null) в config / session.php
Это проблема, с которой я сталкивался несколько раз, и обычно возникает при использовании apache.
Если перед открытием <?php в любом из исполняемых файлов есть какие-либо случайные символы или новые строки, то эти символы передаются веб-сервером до того, как файлы cookie будут подготовлены и отправлены.
Это блокирует отправку файлов cookie клиенту, и клиент должен начинать новый сеанс при каждом запросе.
К сожалению, единственное решение - просмотреть каждый созданный или измененный файл (неплохо, если вы используете Git) и убедиться, что <?php являются первыми символами в каждом файле php.
Вы можете игнорировать файлы просмотра, потому что они не используются до тех пор, пока файлы cookie не будут отправлены.
Наиболее вероятными кандидатами являются контроллеры, поставщики услуг и файлы маршрутов.
Вы пробовали добавить редирект? Вместо
return;можно вызватьreturn redirect()->back();. Насколько я могу судить, приложению нечего делать после почтового запроса. Возможно, вы сможете перенаправить его в представление после обработки запроса.