为了账号安全,请及时绑定邮箱和手机立即绑定

从已清除的会话中单击注销后,Laravel 5.8 显示“419 页面已过期”

从已清除的会话中单击注销后,Laravel 5.8 显示“419 页面已过期”

PHP
MMMHUHU 2021-10-15 16:42:30
我运行php artisan make:auth命令,然后我将逐步解释我接下来要做什么以了解场景,登录到新会话 (example.com/home)打开一个新标签并粘贴 url,即 example.com/home。现在 2 个选项卡在同一个会话中打开。我从其中一个选项卡中单击了注销,它运行良好然后,当我尝试从另一个选项卡注销时,它给了我一个错误,提示“419 页面已过期”,即使重新加载后它也无处可去。问题是,这种情况可能会出现,我不想看到这个错误信息,点击注销后直接注销,即使会话已过期。注意:这个问题不是因为没有添加@csrf
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

嗯,这是一个明显的信息,您可以尝试为该页面制作更好的布局,但仍然最好显示它以便用户知道发生了什么。如果您想以不同的方式处理它,您可以尝试重定向到登录页面。


因此,在您的app\Exceptions\Handler.php文件中的渲染方法中添加以下内容:


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

    return redirect()->route('login');

}


查看完整回答
反对 回复 2021-10-15
?
白板的微信

TA贡献1883条经验 获得超3个赞

问题的解决方法比较简单,只需要在VerifyCsrfToken中间件上加一点点;


use Closure;



    public function handle($request, Closure $next)

    {

        if(!Auth::check() && $request->route()->named('logout')) {

        

            $this->except[] = route('logout');

            

        }

        

        return parent::handle($request, $next);

    }

通常这个文件只包含一个 $except 路由数组,应该被 csrf 忽略。


在这段代码中,我们覆盖了 handle 方法并执行了两项检查。


用户是访客(即,不使用经过身份验证的会话),并且,

是登出路线的路线

如果两者都为真,那么我们将 'logout' 添加到 except 数组。然后我们将控制权传递给核心 VerifyCsrfMiddleware,它识别阵列中是否存在注销路由,并绕过检查。表单数据正确发布,我们使用 LogoutResponse 重定向。


用户看不到错误页面。


通过这种方式检查,我们确保真正的注销请求仍然受到 CSRF Token 的保护。


查看完整回答
反对 回复 2021-10-15
  • 3 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信