(已解决)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 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

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);
}
1周前 评论
讨论数量: 9
DreamOfFreedom

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

4周前 评论
likunyan 4周前
miaotiao (楼主) 1周前
likunyan

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

4周前 评论
DreamOfFreedom 4周前
miaotiao (楼主) 1周前

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

4周前 评论
miaotiao (楼主) 1周前
朕略显ぼうっと萌

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

1周前 评论
miaotiao (楼主) 1周前

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

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

1周前 评论
miaotiao (楼主) 1周前
miaotiao (楼主) 1周前
24K大白羊 (作者) 1周前
miaotiao (楼主) 1周前

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);
}
1周前 评论
空气

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

1周前 评论
miaotiao (楼主) 1周前

csrf看一下except的忽略列表。

1周前 评论

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

file

1周前 评论

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