2016-06-22 2 views
0

Я обновляю сайт Laravel 5.1 до Laravel 5.2.39. У меня было много проблем с «одобренным» процессом обновления (в частности, промежуточным программным обеспечением), поэтому я закончил создание нового сайта Laravel 5.2 и просто перешел на мои взгляды, модели и контроллеры со старого сайта. Это, кажется, работает, за исключением того, когда я представить любую форму я получить маркер исключения несоответствия:Laravel 5.2 token несоответствие

TokenMismatchException in VerifyCsrfToken.php line 67: 

Мои формы имеют маркер (используя {{ csrf_field() }}) в них:

<div class="form-group"> 
    {!! Form::label('name', 'Name') !!} 
    {!! Form::text('name', old('name'), ['placeholder' => 'Name', 'class' => 'form-control']) !!} 
</div> 
<div class="form-group"> 
    {!! Form::label('email', 'Email') !!} 
    {!! Form::email('email', old('email'), ['placeholder' => 'Email', 'class' => 'form-control']) !!} 
</div> 
<div class="form-group"> 
    {!! Form::label('phone', 'Phone') !!} 
    {!! Form::text('phone', old('phone'), ['placeholder' => 'Phone', 'class' => 'form-control']) !!} 
</div> 
{{ csrf_field() }} 
<div class="form-group"> 
    {!! Form::submit('Submit', ['class' => 'btn btn-default btn-small']) !!} 
    <input type="reset" class="btn btn-primary btn-small" /> 
</div> 

и я прочистила cookie, а также попытался установить config/session.phplifetime на большее количество, чтобы гарантировать, что это не время ожидания.

Это работает на приусадебном участке.

Любые идеи, что попробовать?

EDIT: вот маршрут в вопросе

Route::resource('contact', 'ContactController'); 

edit2: вот файл маршрута. Я не верю, что это необходимо для переноса маршрутов в веб-промежуточном программном обеспечении в Laravel 5.2 - однако я пробовал это в обоих направлениях с той же ошибкой.

Route::group(['middleware' => ['web']], function() { 

    Route::get('/', '[email protected]'); 

    Route::resource('account', 'AccountController'); 
    Route::resource('contact', 'ContactController'); 

}); 

Дамп $request->session()->token() в создании действия контроллера показывает текущий маркер сеанса на странице с формой. Это тот же токен, который добавляется в форму (проверяется с источником просмотра).

Но когда он добирается до класса Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::tokensMatch(), я сбрасываю токен сеанса, и он отличается от маркера формы - это никогда не будет соответствовать. Не уверен, чего ожидать здесь.

+0

Можете ли вы показать свой маршрут '' 'POST'' для этого форума? – xdevnull

+0

@ xdevnull-- он находится на маршруте «ресурс», но я отредактирую свой ответ. Спасибо – user101289

+0

@ user101278 Являются ли они под промежуточным ПО Web Group? – xdevnull

ответ

0

Если у вас есть заявка Form:open, вам больше не нужна отдельная строка csrf_field. Form::open должен позаботиться об этом.

Вы используете коллекцию коллективной формы laravel? Старый пакет подсветки больше не поддерживается.

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

+0

Да, это коллективный пакет laravel. – user101289

+0

В приведенном выше примере формы не отображаются формы открытых и закрытых деклараций. Было ли это просто исключено из вашего примера кода или отсутствует? –

+0

да, это всего лишь частичное. Форма работает нормально, и я могу проверить, что полезная нагрузка токена попадает в действие 'store' контроллера, если я отключу проверку маркера в промежуточном программном обеспечении – user101289

0

Разместите свой маршрут в пределах сети Middleware. или в App\http\kernel копировать все маршруты из сети в защищенный $middleware массив.

+0

. См. Edit2 в оригинальном вопросе выше. – user101289

0

Это действительно раздражает, но после всего остального это кажется странной ошибкой, вызванной несколькими сайтами Laravel в одной коробке Homestead. Я установил ключ сеанса по-разному и очистил кеши, но он все еще не работал.

Уничтожив поле для усадьбы и перестраивая, похоже, исправил эту проблему. Спасибо за все комментарии и попытки найти решение.