TokenMismatchException в строке VerifyCsrfToken.php 67

Я знаю, что это известная ошибка с такими вещами, как формы в Laravel. Но я столкнулся с проблемой базовой аутентификации в Laravel 5.2.

Я создал auth, используя Laravel;

php artisan make:auth 

Теперь у меня такая же копия кода на моем сервере и в моем локальном. На моем местном уровне я вообще ничего не понимаю. Однако на моем сервере, когда я пытаюсь зарегистрировать пользователя, я получаю сообщение об ошибке TokenMismatchException in VerifyCsrfToken.php Line 67

И мои локальные, и серверные среды синхронизированы, но я все равно получаю ошибку при регистрации. Любая помощь в том, как я могу это исправить?

Снимок экрана с ошибкой

Я предполагаю, что вы добавили $this->middleware('auth'); внутри конструктора вашего controllerа, чтобы получить аутентификацию. Добавьте вверху вверх, а также в формы регистрации / регистрации, если вы используете {!! Form::someElement !!} {!! Form::someElement !!} :

 {!! csrf_field() !!} 

Или, если вы используете tags ввода внутри своих форм, просто добавьте это сразу после

:

  

Приветствия.

У меня была аналогичная проблема, и это было легко исправить.

Добавьте это в область метатега HTML:

   

Затем под ссылкой JQuery добавьте этот код:

  

Если вы используете отправку HTML-формы (не AJAX), вам нужно поставить:

 {{ csrf_field() }} 

внутри ваших тегов формы.

Вам нужно иметь эту строку кода в разделе вашего документа HTML, вы можете сделать это по умолчанию, это не повредит:

  

И в вашей форме вам нужно добавить это скрытое поле ввода:

  

Вот он, работал на меня.

Я собирался начать вытягивать волосы!

Проверьте свой домен cookie сеанса в конфигурации session.php. Существует опция домена, которая должна соответствовать вашей среде, и это хорошая практика, чтобы этот настраиваемый с вами файл .env для разработки.

 'domain' => env('COOKIE_DOMAIN', 'some-sensible-default.com'), 

Если ничего не работает, вы можете удалить проверку безопасности CSRF, перейдя в файл App / Http / Middleware / VerifyCsrfToken.php и добавив свои маршруты в защищенный $ excpt.

например, если я хочу удалить защиту CSRF со всех маршрутов.

 protected $except = [ '/*' ]; 

PS, хотя его хорошая практика включает защиту CSRF.

Я столкнулся с той же проблемой, когда мое приложение работает на laravel 5.4

 php artisan session:table php artisan make:auth php artisan migrate 

.. а затем следующая команда работает для меня 🙂

 chmod 777 storage/framework/sessions/ 

Еще одна возможность этой проблемы, если вы установили SESSION_DOMAIN (в .env), отличный от HOST_NAME

Счастливое кодирование

Я также столкнулся с той же проблемой и решил ее позже. прежде всего выполнить команду ремесленника:

Кэш php-artisan: clear

И после этого перезапустите проект. Надеюсь, это поможет.

Есть много возможностей, которые могут вызвать эту проблему. позвольте мне упомянуть об этом. Вы случайно изменили конфигурационный файл session.php? Возможно, вы изменили значение домена от null до вашего имени сайта или чего-либо еще в session.php

'domain' => null,

Неправильная конфигурация в этом файле может вызвать эту проблему.

Ваш метод формы – сообщение. Поэтому откройте файл промежуточного ПО / VerifyCsrfToken .php, найдите метод isReading () и добавьте метод «POST» в массив.

Я также получаю эту ошибку, но я решил проблему. Если вы используете php artisan serve {{ csrf_field() }} добавьте этот код {{ csrf_field() }} под {!! Form::open() !!} {!! Form::open() !!}

  1. Кэш php-artisan: clear
  2. Очистить браузер кешей и файлов cookie
  3. Использование личного браузера (Mozilla) / Окно инкогнито (Chrome)
  4. Откройте свою форму / страницу, а затем снова отправьте ребятам

Надеюсь, это решит вашу проблему.

Убедиться

 {!! csrf_field() !!} 

добавляется в вашу форму в синтаксисе лезвия.

или в простой форме синтаксиса

  

наряду с этим, убедитесь, что в session.php (в папке конфигурации) правильно установлено следующее.

 'domain' => env('SESSION_DOMAIN', 'sample-project.com'), 

или обновить то же самое в файле .env, например,

 SESSION_DOMAIN=sample-project.com 

В моем случае {!! csrf_field () !!} был добавлен правильно, но SESSION_DOMAIN настроен неправильно. После того, как я изменил его с правильным значением в моем .ENV-файле, он сработал.

изменить драйвер сеанса в session.php, чтобы файл my был установлен в массив.

Также может возникнуть, если пользователь «www-data» не имеет прав доступа / записи в папке: «laravel-project-folder» / storage / framework / sessions /

Вы проверили скрытое поле ввода, где генерируется токен?

Если он равен нулю, ваш токен не возвращается функцией csrf_token. Вы должны написать свой маршрут, который отображает форму внутри группы промежуточного программного обеспечения, предоставляемую laravel следующим образом:

  Route::group(['middleware' => 'web'], function () { Route::get('/', function () { return view('welcome'); }); 

Здесь корневой маршрут содержит мою страницу регистрации, для которой требуется токен csrf. Этот токен управляется laravel 5.2.7 внутри промежуточного ПО «web» в kernel.php.

Не забудьте вставить {!! csrf_field () !!} внутри формы ..

Ниже работал для меня.

  

Перейдите в app/provides .

Затем в файле RouteServiceProvider.php вам нужно будет удалить 'middleware' => 'web' в protected function mapWebRoutes(Router $router)

У меня была такая же проблема, но я решил ее, исправив мою форму, как показано ниже:

 {!!Form::open(['url'=>route('auth.login-post'),'class'=>'form-horizontal'])!!} 

Если это не решит вашу проблему, можете ли вы показать, как вы открыли форму?

Вы должны попробовать это.

Добавьте {{csrf_field ()}} сразу после вашего тега открытия формы.

 
{{ csrf_field() }}

Вы перенаправляете его обратно после публикации? У меня была эта проблема, и я смог ее решить, возвращая ту же точку зрения вместо использования Redirect :: back ().

Используйте это представление return () -> with () вместо Redirect :: back ().

Для меня мне пришлось использовать безопасные https, а не http.

попробуйте изменить время жизни сеанса на config/session.php следующим образом:

'lifetime' => 120, 'lifetime' => 360,

Здесь я установил продолжительность жизни до 360, надеюсь, что эта помощь.

По умолчанию cookies сеанса будут отправляться обратно на сервер, если браузер имеет соединение HTTPS . Вы можете отключить его в файле .env (не рекомендуется для производства)

 SESSION_SECURE_COOKIE=false 

Или вы можете отключить его в config / session.php

 'secure' => false, 

Я получил эту ошибку при загрузке больших файлов (видео). Форма работала нормально, без ошибок рассогласования, но как только кто-то подключил большой видеофайл, он выбросил бы эту токенную ошибку. Настройка максимально допустимого размера файла и увеличение времени обработки позволила мне решить эту проблему. Не уверен, почему Laravel выбрасывает эту ошибку в этом случае, но вот еще одно потенциальное решение для вас.

Вот ответ StackOverflow, в котором более подробно рассказывается о том, как решить проблему с большой загрузкой файлов.

PHP изменяет максимальный размер загружаемого файла

В моем случае у меня возникла проблема при попытке войти в систему после перезапуска сервера, но у меня было поле csrf в форме, и я не обновлял страницу, или что-то не так в кеше.

Это было мое решение. Я поместил этот fragment кода в папку \ App \ Http \ Middleware \ VerifyCsrfToken.php

 public function handle($request, Closure $next) { try { return parent::handle($request, $next); // TODO: Change the autogenerated stub } catch(TokenMismatchException $e) { return redirect()->back(); } } 

То, что он делает, – это перехват TokenMismatchException, а затем redirect пользователя на страницу (перезагрузка токена csrf в заголовке и в поле). Это может не работать всегда, но это сработало для моей проблемы.

Попробуйте кеш php artisan: очистите или вручную удалите кеш-память с сервера.

Если вы проверите некоторые формы по умолчанию из Laravel 5.4, вы заполните, как это делается:

 
{{ csrf_field() }}
@if ($errors->has('email')) {{ $errors->first('email') }} @endif

 {{ csrf_field() }} 

является наиболее подходящим способом добавления настраиваемого скрытого поля, которое будет понимать Laravel.

csrf_filed() использует csrf_token() внутри, как вы можете видеть:

 if (! function_exists('csrf_field')) { /** * Generate a CSRF token form field. * * @return \Illuminate\Support\HtmlString */ function csrf_field() { return new HtmlString(''); } } 

И csrf_field() использует сеанс для задания.

 function csrf_token() { $session = app('session'); if (isset($session)) { return $session->token(); } throw new RuntimeException('Application session store not set.'); } 

У меня такая же проблема, когда я сначала пытался опробовать Laravel 5.2, затем я узнал о {{!! csrf_field() !!}} {{!! csrf_field() !!}} должен быть добавлен в форму и решил ее. Но позже я узнал о Form Helpers, это заботится о защите CSRF и не дает никаких ошибок. Хотя помощники формы не могут быть доступны после Laravel 5.2, вы все равно можете использовать их из LaravelCollective .

Вы можете решить, удалив строку. перейдите в приложение \ http \ kernel.php, здесь вы можете увидеть строку \ App \ Http \ Middleware \ VerifyCsrfToken :: class, это сработало для меня.

Проблема у меня заключалась в небольшом значении post_max_size в php.ini.

Поместите этот код между тегами

и :

  
Давайте будем гением компьютера.