TokenMismatchException при повторной отправке формы

Я использую Laravel 5.3 и вспомогательные формы laravelcollective/html.

Когда я отправляю форму, если проверка не проходит, вы возвращаетесь к той же форме, используя return redirect()->back()->with

Затем, если я снова отправлю ту же форму, я получу TokenMismatchException, что произошло из-за того, что токен csrf не обновился после перезагрузки формы.

Любые идеи о том, как я могу обновить токен?

Обновление от 07 11

Чтобы открыть форму, я использую следующее:

{!! Form::open(['url'=>'/user/create', 'method'=>'post', 'id'=>'create']) !!}

Что автоматически добавляет поле токена.

Но также я попытался добавить токен вручную, например:

{!! Form::open(['url'=>'/user/create', 'method'=>'post', 'id'=>'create']) !!}
{!! Form::token() !!}

Здесь токен фактически создается дважды, оба токена одинаковы.


person Juancho Ramone    schedule 04.11.2016    source источник
comment
Может быть несколько причин, по которым laravel не обновляет токен при перенаправлении. Не могли бы вы поделиться фрагментом кода вашей формы. Также вы можете попробовать laravel способ добавления токена, т.е. {{ Form::token(); }} вместо того, чтобы добавлять его как скрытое поле формы самостоятельно. Дайте мне знать, если это поможет.   -  person Shuja Ahmed    schedule 04.11.2016
comment
Спасибо, Шуджа, я обновил вопрос с вашим предложением, но проблема не устранена.   -  person Juancho Ramone    schedule 07.11.2016


Ответы (1)


Проблема заключалась в том, что я отправлял значение _token обратно в представление. Я делал следующее:

return redirect()
->back()
->with(
['errors' => $validator->errors()->all()] 
+ $request->input()
);

Где $request->input('_token') не фильтруется. Вместо этого я изменил его на следующее, которое работает, так как фильтрует _token:

return redirect()
->back()
->withErrors($validator->errors()->all())
->withInput($request->input());
person Juancho Ramone    schedule 07.11.2016