На моей странице регистрации форма отображается правильно, и в ней {{ csrf_field() }}
присутствует CsrfToken ( )).
Форма HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Я использую встроенную аутентификацию для пользователей. Не менял ничего кроме маршрутов и редиректов.
Когда я отправляю форму (также сразу после перезагрузки), она сообщает, что срок действия страницы истек из-за бездействия. Обновите страницу и попробуйте еще раз. ошибка.
Боже, я упускаю очень маленькую вещь. Но не уверен, что это такое. Любая помощь?
Обновить
Нашел проблему. Драйвер сеанса был установлен на массив. Изменил его на файл, и ошибка исчезла. Но что не так, если я использую массив?
php
laravel
csrf
laravel-5.5
Сугата Бозе
источник
источник
array
. Изменил его на файл, и ошибка исчезла. Но что не так, если я использую массив?Ответы:
Если вы приходите к этому ответу непосредственно из поиска , убедитесь, что вы уже добавили токен csrf в свою форму с
{{ csrf_field() }}
помощью OP.Если у вас установлен драйвер сеанса в файл:
Возможно, это связано с тем, что storage_path недоступен для записи. Здесь хранятся данные сеанса относительно токенов, если вы используете сеансы на основе файлов. Это можно проверить с помощью
is_writable(config('session.files'))
Для OP драйвер сеанса был установлен в массив. Массив предназначен только для тестирования. Поскольку данные не сохраняются, он не сможет сравнить токен при следующем запросе.
https://laravel.com/docs/5.5/session#configuration
Проверьте config / session.php
Наконец, у меня возникла проблема: у нас был проект с доменом сеанса и безопасными настройками в config / session.php, но сайт разработки не использовал HTTPS (SSL / TLS). Это вызвало эту общую ошибку, поскольку по умолчанию для sessions.secure было установлено значение true.
источник
Carbon::setTestNow($time);
в тестах, я не очищал его, используяCarbon::setTestNow();
потом.Я столкнулся с той же проблемой в Laravel 5.5. В моем случае это произошло после изменения маршрута с GET на POST. Проблема заключалась в том, что я забыл передать токен CSRF, когда переключился на POST.
Вы можете опубликовать токен CSRF в своей форме, позвонив:
Или исключите свой маршрут в app / Http / Middleware / VerifyCsrfToken.php
источник
csrf_field()
присутствует в форме. Принятый ответ описывает проблему. Спасибо.Попробуйте их все.
источник
Это вызвано тем, что
Illuminate\Session\TokenMismatchException
посмотрите на этот пример кода, как правильно с этим справиться:источник
Мой случай был решен
SESSION_DOMAIN
, на моем локальном компьютере нужно было установитьxxx.localhost
. Это вызывало конфликты с продуктомSESSION_DOMAIN
,xxx.com
который был установлен непосредственно в файле конфигурации session.php.источник
file
илиcookie
?Некоторая информация хранится в куки, которая связана с предыдущими версиями laravel в разработке. Таким образом, это противоречит токенам, сгенерированным csrf, которые генерируются другими версиями. Просто очистите файл cookie и попробуйте.
источник
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
код в сгенерированном html?Для тех, у кого проблема осталась и ничего не помогло. Обратите внимание на параметр mbstring.func_overload в php.ini. Он должен быть установлен в 0. И mbstring.internal_encoding установить в UTF-8. В моем случае это было проблемой.
источник
Я меняю разрешение на хранилище и ошибка пропала. Казалось, проблема заключалась в отсутствии разрешения.
источник
Добавить
@csrf
в форму и также перейдите на VerifyCsrfToken.phpприложение-> Http-> Middleware-> VerifyCsrfToken.php
источник
В моем случае сайт был в порядке на сервере, но не на локальном. Потом я вспомнил, что работал над безопасным сайтом.
Итак, в файле config.session.php установите для переменной secure значение false.
источник
У меня было приложение с несколькими поддоменами, и проблема с файлом cookie была между ними. Очистка файлов cookie решила мою проблему.
Кроме того , попробуйте установить
SESSION_DOMAIN
в .env файле. Используйте именно тот субдомен, который вы просматриваете.источник
Убедитесь, что на вашем веб-сервере установлено правильное системное время. В моем случае бродячая машина была в будущем (26 января 14:08:26 UTC 2226), поэтому, конечно, время в cookie сеанса моего браузера истекло около 200+ лет назад.
источник
установить mbstring.func_overload = 2
это помогло мне
источник
Я нашел два решения, чтобы избежать этой ошибки: 1) добавив protected $ except = ['/ yourroute'], возможно отключить проверку токена csrf из определенного корня. 2) просто прокомментируйте строку \ App \ Http \ Middleware \ VerifyCsrfToken :: class в группе защищенного промежуточного программного обеспечения в ядре
источник
У меня была такая же проблема, но проблема не во фреймворке, а в браузере. Я не знаю почему, но в моем случае Google Chrome автоматически блокирует файлы cookie. После разрешенных файлов cookie проблема была решена.
источник
Короткий ответ
Добавьте запись маршрута для
register
вapp/Http/Middleware/VerifyCsrfToken.php
и очистите кеш и маршрут кеша с помощью команд:
подробности
Каждый раз, когда вы заходите на сайт Laravel, генерируется токен, даже если сеанс не был запущен. Затем в каждом запросе этот токен (хранящийся в файлах cookie) будет проверяться на соответствие сроку его действия, установленному в
SESSION_LIFETIME
полеconfig/session.php
файла.Если вы оставите сайт открытым дольше, чем время истечения срока действия, и попытаетесь сделать запрос, этот токен будет оценен, и ошибка истечения срока действия вернется. Итак, чтобы пропустить эту проверку в формах, которые не входят в функции аутентифицированных пользователей (например, регистрация или вход), вы можете добавить маршрут except в
app/Http/Middleware/VerifyCsrfToken.php
.источник
Много раз это происходит, потому что вы тестируете проект на заднем плане.
источник
Решение:
используйте новую вкладку в режиме инкогнито, а затем проверьте ее снова.
причина:
в моем случае другой пользователь вошел в мою админ-панель
источник