在VerifyCsrfToken.php中处理TokenMismatchException,刷新Laravel 5中的页



Laravel 5.3

我希望处理TokenMismatchException在VerifyCsrfToken.php。通常情况下,当我没有刷新当前页面,并且之前的令牌仍然存在时,就会出现此异常,因此我重新加载页面,设置新令牌,然后可以进行登录过程。好的,但是,我希望处理异常并自动刷新页面。

这可能吗?

如果您仍然希望在VerifyCsrfToken.php中处理handle TokenMismatchException以下是laravel 5.3的前进方向。在中间件目录

中找到VerifyCsrfToken.php

应用程序中间件 Http VerifyCsrfToken.php

一定要加上

使用闭包;

避免声明异常错误。然后添加handle方法来比较sessionToken和表单输入Token。

public function handle($request, Closure $next)
{
  if($request->input('_token'))
  {
    if ( Session::getToken() != $request->input('_token'))
    {
      notify()->flash('Your session has expired. Please try logging in again.', 'warning');
      return redirect()->guest('/login');
    }
  }
  return parent::handle($request, $next);
}

生动的洞察力:完全可选

  • 检查会话令牌是否匹配请求令牌(输入令牌隐藏)

dd(会话:getToken() = = $请求->输入(' _token '));

  • 记录会话已过期的错误,这完全是可选的

Log::error("找到过期令牌。"重定向到/");

  • 闪烁错误消息,并重定向响应到登录页面

返回重定向()->客人("/")->with('global', '发现过期令牌')。重定向到/');

  • 注意:

    如果这个If语句不为真,返回值(return parent::handle($request, $next);)将被执行这意味着如果令牌有问题,将抛出错误异常 (TokenMismatch异常)。这可能是因为忘记在表单中添加{{csrf_field()}},导致$request->input('_token')找不到或为空。

  • 注意:

    我正在使用代码/通知(https://github.com/codecourse/notify)

notify()->flash('您的会话已过期。请尝试登入再一次。"、"警告");

如果你想在没有包的情况下显示消息,

是完全可选的。您可以使用laravel实现。比如

返回重定向()->客人("/")->with('global', '发现过期令牌')。重定向到/');

最新更新