我使用的是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的默认错误屏幕?
答案 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.');
}