菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2893
0

关于 CSRF 验证的顺序的疑问

原创
05/13 14:22
阅读数 1757

疑问来源于 未登录状态 Ajax 请求出现 “CSRF token mismatch.” 错误! 这个帖子,因为对 Laravel 也不是特别熟悉,所以调查了2个多小时,最后终于调查明白了。

登录系统后,长时间未操作导致 session 过期了,这时候点击链接(除'HEAD', 'GET', 'OPTIONS' 方法外)的时候,你期待是跳转到登录页面?还是抛出 CSRF 异常呢?

我更侧重于跳转到登录页面,这样也更合理。但是默认的 App\Http\Kernel 文件配置会直接提示 CSRF 异常,原因是因为在登录验证过滤器运行前,会优先执行 CSRF 过滤器导致的。

我的解决方案是修改了默认的 $middlewarePriority 数组,修改为:

protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
    ];

VerifyCsrfToken 验证过滤器放置在 Authenticate 之后,这样就可以解决上述的问题。也准备提交到官方仓库中,大家可以各抒己见,说出自己的想法。

发表评论

0/200
2893 点赞
0 评论
收藏
为你推荐 换一批