【问题标题】:TokenMismatchException when resubmitting a form重新提交表单时出现 TokenMismatchException
【发布时间】:2016-11-04 17:47:40
【问题描述】:

我正在使用 Laravel 5.3laravelcollective/html 表单助手。

当我提交表单时,如果验证失败,它会将您带回到使用 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() !!}

这里的token实际上是创建了两次,两个token是一样的。

【问题讨论】:

  • laravel 在重定向时不刷新令牌可能有多种原因。你能分享你表单的代码sn-p吗?您也可以尝试添加令牌的 laravel 方式,即 {{ Form::token(); }} 而不是自己将其添加为隐藏的表单字段。如果有帮助,请告诉我。
  • 谢谢Shuja,我已经根据您的建议更新了问题,但问题仍然存在

标签: php laravel-5 csrf laravelcollective


【解决方案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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 2015-09-16
    • 2018-10-22
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2016-10-19
    • 2019-07-20
    相关资源
    最近更新 更多