Laravel中VerifyCsrfToken.php中的TokenMismatchException

时间:2016-08-29 20:34:35

标签: php forms laravel-5.2 token

我使用的是Laravel 5.2,我有一个用户可以提交的表单。

我没有使用Form帮助器,但我确保将其包含在所有表单刀片视图中:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

当我转到带有表单的网页时,它会按预期显示表单,然后我提交它,它按预期工作。

另一种情况是,我转到网页,我走开然后30分钟后回来并尝试提交表单,我收到了错误消息。我很确定这是因为令牌已过期,但我要做的是检查令牌是否已过期,将用户重定向到同一页面(刷新令牌),并显示一条错误消息,说明表格已过期。

理论上,在提交时,请检查:

if token expired
  return redirect('login')->with('error', 'The form expired, please try again');
endif

有没有办法检查,而不是显示Laravel的默认错误屏幕?

2 个答案:

答案 0 :(得分:0)

您应该在handle中间件中为方法VerifyCsrfToken定义自定义行为。默认情况下,如果令牌过期,则会抛出异常TokenMismatchException。

答案 1 :(得分:0)

我将此添加到我的Handler.php渲染方法:

if ($e instanceof \Illuminate\Session\TokenMismatchException) {

    return redirect()
        ->back()
        ->withInput($request->except('_token'))
        ->with('status', 'The form has expired, please try again.');
}