(已解决)Laravel 不显示 419 csrf 页面。

问题

页面的登陆按钮是使用的提交表单形式,但是在几个小时后,csrf过期了之后,点击退出会,显示 419 页面,如何避免显示这个419页面呢,或者 csrf 过期的话,自动刷新本页面,重新获取 csrf 也可以呀。

<a href="{{ route('logout') }}" onclick="event.preventDefault();document.getElementById('logout-form').submit();">退出</a>
<form id="logout-form" action="{{ route('front.logout') }}" method="POST" style="display: none;">
     @csrf
</form>

Laravel 不显示 419 csrf 页面。

思路

经过11月10日下午的测试,发现我下面的内容是错误的,官方也会报 csrf 419。


(错误的)我使用了官方自带的认证,这个在 csrf 过期(也就是 session 失效后),点击退出后并没有像我一样显示 419 页面,我正在弄明白这个原理。(错误的)如果大家有懂这个原理的,请不吝赐教~😁😁😁

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

app/Exceptions/Handler.php 中,,修改 render 方法:

public function render($request, Exception $exception)
{
    if (!$request->ajax() && ($exception instanceof TokenMismatchException)) {
        return redirect()
            ->back()
            ->withErrors('表单已过期,请重新提交') // 可选
            ->withInput($request->input()); // 可选
    }

    return parent::render($request, $exception);
}
6个月前 评论
zhaochong 3个月前
largezhou (作者) 3个月前
讨论数量: 9
自由与温暖是遥不可及的梦想

社区解决方案 有问题,先搜索一下。

7个月前 评论
likunyan 7个月前
miaotiao (楼主) 6个月前
likunyan

后端重定向回登录页面,然后带上数据吧,一般都这么做。

7个月前 评论
自由与温暖是遥不可及的梦想 7个月前
miaotiao (楼主) 6个月前

退出功能不需要用到表单。直接在退出控制器里清除session就好了。

7个月前 评论
miaotiao (楼主) 6个月前
朕略显ぼうっと萌

你可以捕获这个异常 TokenMismatchException ,对于这个异常进行处理就好了!

6个月前 评论
miaotiao (楼主) 6个月前

这个问题是因为 session 过期导致,我之前提交过 PR,但是被官方拒绝了。

如果你要避免这样的问题,可以看下 PR 提交的内容,变更过滤器的顺序即可。点我查看详细

6个月前 评论
miaotiao (楼主) 6个月前
miaotiao (楼主) 6个月前
24K大白羊 (作者) 6个月前
miaotiao (楼主) 6个月前

app/Exceptions/Handler.php 中,,修改 render 方法:

public function render($request, Exception $exception)
{
    if (!$request->ajax() && ($exception instanceof TokenMismatchException)) {
        return redirect()
            ->back()
            ->withErrors('表单已过期,请重新提交') // 可选
            ->withInput($request->input()); // 可选
    }

    return parent::render($request, $exception);
}
6个月前 评论
zhaochong 3个月前
largezhou (作者) 3个月前
空气

做个异常监听,然后如果是AJAX 就返回个事件,然后自动刷新页面或者其他的提示都行,419肯定是不优化的提示。

6个月前 评论
miaotiao (楼主) 6个月前

csrf看一下except的忽略列表。

6个月前 评论

@隔壁王叔叔 忽略列表是空的。

file

6个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!