求助:未登录状态 Ajax 请求出现 “CSRF token mismatch.” 错误!

laravel5.8,权限认证使用的是默认的auth包。登录状态下ajax请求能够正常运行,一旦登录过期,那么ajax请求不是返回的未登录错误,而直接是“CSRF token mismatch.”,请求时,header和postfields中都有CSRF token信息,但还是报错。请大声指教。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

可以把 $middlewareGroups 数组中的 AuthenticateSession 过滤器的注释去掉,使之有效。这样应该就是你要的效果了。但是为什么框架默认是注释的,我要在看看。

5年前 评论
moocky (楼主) 5年前
24K大白羊 (作者) 5年前
tian_success 5年前
讨论数量: 6

页面多处使用csrf,出现的问题

5年前 评论
moocky (楼主) 5年前
kangfq 5年前

@moocky 重新捋了一下 知道了为什么会出现这个问题

App\Http\Kernel.php 文件的 $middlewareGroups 数组下的 web 是这个路由下所有的请求都要走的过滤器。
走完这些过滤器,才会走 auth 对应的过滤器。

那么也就知道了为什么会先报 CSRF token mismatch. 的异常,而不是先提示登录过期的问题了。

5年前 评论

可以把 $middlewareGroups 数组中的 AuthenticateSession 过滤器的注释去掉,使之有效。这样应该就是你要的效果了。但是为什么框架默认是注释的,我要在看看。

5年前 评论
moocky (楼主) 5年前
24K大白羊 (作者) 5年前
tian_success 5年前

@moocky 原因已经调查清楚了,还是执行过滤器顺序问题导致的,具体可以看这个帖子CSRF过滤器执行顺序

为什么把 AuthenticateSession 注释去掉就好用了呢?

这个和 $middlewarePriority 数组有关系,当 AuthenticateSession 有效后,会通过排序机制将 Authenticate 过滤器放置在 VerifyCsrfToken 之前执行,所以就不会有问题了。调整登录页面不是 AuthenticateSession 过滤器做的工作,这也是调查比较费时间的地方。

5年前 评论

没仔细看你说的啥,laravel 的VerifyCsrfToken中间件里面是可以配置哪些不需要csrf的

5年前 评论

@24K大白羊 按你的方法,還是不行

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!