2016-11-04 136 views
0

我正在使用Laravel 5.3laravelcollective/html表单助手。TokenMismatchException重新提交表单时

当我提交表单,如果验证失败,它需要你回来使用return redirect()->back()->with

然后,如果我重新提交相同的形式,我再次得到一个TokenMismatchException相同的形式,什么happenned是,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多种原因未刷新上重定向令牌。你能分享你的表单的代码片段吗?你也可以尝试添加令牌的方式,例如{{Form :: token(); }}而不是将它自己添加为隐藏的表单字段。让我知道它是否有帮助。 –

+0

谢谢Shuja,我已经用你的建议更新了这个问题,但问题仍然存在 –

回答

0

问题是我正在发送值_token回到视图。 我在做什么:

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

凡$请求 - >输入( '_令牌')没有被过滤。 相反,我已经改变了它其中工程下面,因为它并过滤_token:

return redirect() 
->back() 
->withErrors($validator->errors()->all()) 
->withInput($request->input());