TokenMismatchException в строке VerifyCsrfToken.php 53 в Laravel 5.1

Когда я пытаюсь войти, я вижу токенную ошибку. Я проверил маркер в форме вида, это правильно, и когда comment \App\Http\Middleware\VerifyCsrfToken::class , в Kernel.php он заставляет меня войти, но после перенаправления на мою панель инструментов я не вошел. Я использую MAMP на mac.

 <div> <h1>Login</h1> <div> {!! Form::open(['url'=>'user/login','class' => '']) !!} <input type="hidden" name="_token" value="{{ csrf_token() }}"> <ul> <li><label>Customer Code</label>{!!Form::Text('customer_code',Input::old('customer_code'),['class'=>''])!!}</li> <li><label>Password</label>{!!Form::Password('password','',['class'=>''])!!}</li> <li>{!! Form::submit('Submit',array('class' => 'btn')) !!}</li> </ul> {!!Form::close()!!} </div> <div><a href="{!!URL::to('user/forget_password')!!}">Forget Password</a></div> </div> 

Тем временем я использую Sentry Package для входа.

  /** * post_login */ public function post_login() { try { $rules = [ 'customer_code' => 'required', 'password' => 'required', ] ; $message = [ 'customer_code.required' => 'erorrr1', 'password.required' =>'error2' ]; $validator = Validator::make(Input::all(), $rules,$message); if ($validator->fails()) { return Redirect::back()->withErrors($validator)->withInput(); } // if ($validator->fails()) else { $authUser = Sentry::authenticateAndRemember(array( 'customer_code' => Input::get('customer_code'), 'password' => Input::get('password')), false); if($authUser) { //$login = Sentry::loginAndRemember($authUser); return Redirect::to('user/panel/'.$authUser->id)->with('comment', 'Welcome'); } else { return Redirect::back()->with('comment', 'Error for login'); } }//validator } catch(\Exception $e) { return Redirect::back()->withInput(Input::except('password','file'))->withErrors(['ERROR!!!!!']); } } 

Related of "TokenMismatchException в строке VerifyCsrfToken.php 53 в Laravel 5.1"

Отредактировано:

Поскольку вы используете Form Builder, удалите это из своей формы. Laravel form builder автоматически добавляет скрытое поле токена в вашу форму, когда вы делаете Form::open()

Поэтому удалите эту строку:

  <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

Благодаря новой установке Laravel 5.1 без обновления композитора с версии 5.0 до 5.1 я вижу некоторые отличия и один в папке Middleware.

EncryptCookies.php – это новое промежуточное программное обеспечение, проверьте, есть ли у вас это.

Итак, я не тестировал снова, я tranfert в настоящий момент мои файлы от моей версии 5.0 до новой установки версии 5.1, но я уверен, что это может быть решением этой проблемы, EncryptCookies.php был в стеке ошибка несоответствия токена.

Ну, я думаю, что все пропустили создание токена CSRF во время выхода из системы!

Как я решил проблему.

Просто добавьте код ниже в заголовок.

 <meta name="csrf-token" content="{{ csrf_token() }}"> <script type=text/javascript> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); </script> 

И если вы используете {!!Form::open()!!} он автоматически создаст токен. В противном случае вы можете использовать

 <input type="hidden" name="_token" id="_token" value="{!! $csrf_token !!}}" /> 

или

 {!! csrf_field() !!} 

просто немедленная форма открыта. Наиболее важно использовать return Redirect::to(''); о функции контроллера или перезагрузке страницы или перезагрузке ajax, чтобы маркер мог быть создан!

Подобно:

 public function logout() { Session::flush(); Auth::logout(); return Redirect::to('/'); } из public function logout() { Session::flush(); Auth::logout(); return Redirect::to('/'); } 

Чтобы убедиться, что маркер правильно создан или не проверяет «просмотр источника страницы» в браузере, он будет выглядеть так:

 <meta name="csrf-token" content="TbgWTQZhTv0J4eFBQNU4rlM3jOlmBeYlTgf0waZB"> <script type=text/javascript> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); </script> <form method="POST" action="/login-process" accept-charset="UTF-8" class="form-inline"><input name="_token" type="hidden" value="TbgWTQZhTv0J4eFBQNU4rlM3jOlmBeYlTgf0waZB"> 

Я думаю, что это может решить проблему, поскольку это сработало для меня!

Добавление {!! csrf_field() !!} {!! csrf_field() !!} решил мою проблему, как показано ниже:

 <form action="#" method="post" class="form-horizontal" role="form"> {!! csrf_field() !!} </form> 

Если используется помощник формы Laravel, например, ниже:

 {!! Form::open(array('class' => 'form-horizontal', 'role' => 'form')) !!} 

Код CSRF будет добавлен автоматически в ваш html-скрипт. Также убедитесь, что вы просматриваете исходный код в браузере, чтобы убедиться, что поле, такое как показано ниже, действительно добавлено.

 <input type="hidden" name="_token" value="dHWBudjTyha9AMr0SuV2ABq5NNK6bTIDZDXRWCBA"> 

Вы не разместили свой образец кода в своем вопросе.

Поэтому проверьте свой код со следующими параметрами,

попробуйте со скрытым значением поля ввода:

 {!! csrf_token() !!} or {{ csrf_token() }} 

Вы также можете использовать шаблон формы:

 {!! Form::open(array('method' => 'GET/POST','url' => 'YOUR_URL',)) !!} 

Это автоматически добавит CSRF-код в ваш html-скрипт

Еще одна вещь, которую нужно включить в раздел <head> :

 <meta name="csrf-token" content="{{ csrf_token() }}"> 

У меня также была проблема при попытке загрузить файл. Выключилось превышение max_post_size, и в этом случае, очевидно, все POST-переменные очищаются, и поэтому маркер не принимается.

Добавить <?php echo Form::token(); ?> <?php echo Form::token(); ?> в стороне формы.

Это решение работало для меня:

Добавьте {{ csrf_field() }} любом месте формы.

Удалите приложение \ Http \ Middleware \ VerifyCsrfToken :: class из промежуточного программного обеспечения $ в Kernel.php.

Я использовал следующий код. Он работает отлично.

 <?php echo csrf_token(); ?> 

У меня такая же проблема. Я использую Laravel 5.1.28, php 5.6.13
После просмотра TokenMismatchException в VerifyCsrfToken я искал в Интернете ответы, но никто не решил мою проблему.

Страница отправила токен. Значения маркера также видны в файле сеанса в хранилище / каркасе / сеансах каталога (я отключил шифрование, чтобы увидеть его).

Измученный, я повторно устанавливаю laravel и использую простую форму для тестирования – он работал без ошибки несоответствия токенов.

Переместив мой код на вновь установленную часть laravel по частям, я, наконец, обнаружил, что проблема вызвана doctrine / dbal (я до сих пор не знаю почему).

Удалили его из composer.json, и проблема исчезла.
В composer.json ошибка несоответствия токенов была видна со следующей строкой:

 "require": { .... "doctrine/dbal": "^2.5" ... }, 

Ваш случай может быть другим, но вы можете захотеть, измените ли вы что-нибудь в composer.json, что может вызвать проблему.

У меня такая же проблема при использовании этого кода

 <input type="hidden" name="_token" value="{!! csrf_token() !!}"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

изменив его на {!! csrf_field() !!} {!! csrf_field() !!} решить мою проблему

я на L5.1

Меня устраивает.

 <meta name="csrf-token" content="{{ csrf_token() }}" /> <script> function getMessage(){ $.ajax({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, type:'POST', url:'/getmsg', // data:'_token = <?php echo csrf_token() ?>', success:function(data){ $("#msg").html(data.msg); } }); } </script> {{ Form::button('Replace Message',['onClick'=>'getMessage()']) }}