You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义中间件中Auth::check()返回false,问题原因是什么?

自定义中间件中Auth::check()返回false的常见原因

我来梳理下实际开发中踩过的坑,导致自定义中间件里Auth::check()返回false的核心原因大概有这些:

  • 中间件执行顺序搞反了:Laravel的中间件是按注册顺序依次跑的,如果你的自定义中间件放在StartSession、AuthenticateSession这类会话初始化中间件之前,那会话还没启动,Auth根本拿不到用户信息。一定要把自定义中间件放在web中间件组之后,或者在app/Http/Kernel.php里明确把它排在Session相关中间件的后面。

  • 路由没绑定web中间件组:要是你的路由没加到web中间件组里,Session、Cookie这些认证依赖的机制都没启用。比如把路由写到api中间件组里,api组默认是无状态的,用token而非Session认证,这时候Auth::check()肯定返回false——它默认用的是web guard的Session驱动。

  • Guard配置不匹配:如果用户登录时用的是web guard,但你的中间件里误指定了其他Guard(比如Auth::guard('api')->check()),或者config/auth.php里的默认Guard配置错了,都会导致Auth::check()识别不到已登录用户。

  • 会话存储出问题了:比如用文件驱动时Session目录权限不足,用Redis/Memcached驱动时缓存服务连接失败,导致用户登录后的会话数据没存下来;或者中间件逻辑里不小心调用了Auth::logout(),提前销毁了会话。

  • Cookie或跨域配置不对:前后端分离场景下,前端请求没携带Session Cookie,或者Cookie的domain、path、secure属性和当前环境不匹配(比如本地开发开了secure),后端接收不到会话标识,自然识别不了用户。

内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:57:28