【问题标题】:TokenMismatchException in VerifyCsrfToken.php in LaravelLaravel 中的 VerifyCsrfToken.php 中的 TokenMismatchException
【发布时间】:2016-08-29 20:34:35
【问题描述】:

我正在使用 Laravel 5.2,并且我有一个用户可以提交的表单。

我没有使用表单助手,但我确保我在所有表单刀片视图中都包含了它:

<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 的默认错误屏幕?

【问题讨论】:

    标签: php forms laravel-5.2 token


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      if ($e instanceof \Illuminate\Session\TokenMismatchException) {
      
          return redirect()
              ->back()
              ->withInput($request->except('_token'))
              ->with('status', 'The form has expired, please try again.');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 2016-12-23
        • 2017-02-21
        • 2017-02-23
        • 2016-07-27
        相关资源
        最近更新 更多