2016-11-04 3 views
0

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

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

Тогда, если я повторно ту же форму, я снова получу TokenMismatchException, чем Произошло то, что маркер CSRF сделал не обновляется после перезагрузки формы.

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

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

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

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

который автоматически добавляет маркер поля.

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

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

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

+0

Там может быть несколько причин для Laravel не освежающие маркер на перенаправлении. Можете ли вы поделиться фрагментом кода вашей формы. Также вы можете попробовать laravel способ добавления токена, то есть {{Form :: token(); }} вместо того, чтобы добавлять его как скрытое поле формы самостоятельно. Дайте мне знать, если это поможет. –

+0

Спасибо Shuja, я обновил вопрос с вашим предложением, но проблема остается –

ответ

0

Проблема была в том, что я отправил значение _token обратно в представление. То, что я делал, было:

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

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

return redirect() 
->back() 
->withErrors($validator->errors()->all()) 
->withInput($request->input()); 
Смежные вопросы