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

Laravel非API路由无法检测已认证用户问题排查

问题原因

  1. 认证机制完全隔离:web guard采用session认证,api guard采用Passport Token认证,两者是独立的认证体系。SPA通过api guard登录后,仅在本地存储了Token,web端的session中没有任何登录状态,因此auth()->check()返回false;而auth('api')->check()需要请求头携带Token才能验证,web页面请求时没带这个Token,所以也返回false。

  2. CreateFreshApiToken中间件的逻辑不匹配你的场景:这个中间件的核心作用是为已通过web guard登录的请求,附加laravel_token Cookie,让SPA后续请求能自动带上这个Cookie实现无感知认证。但你是先通过api guard登录,此时web端没有session登录状态,中间件执行时$request->user($this->guard)(默认使用web guard)拿不到用户实例,自然不会生成Cookie。

  3. 跨子域状态不共享:虽然session_domain设为.foo.com,但只有当用户通过web guard完成登录流程时,才会生成对应的session Cookie。你当前的登录走的是api guard,不会触发web session的创建,所以foo.com的web页面无法感知登录状态。

简单总结:你用两套互不关联的认证方式登录,自然没法打通状态;CreateFreshApiToken是给web登录后的SPA用的,不是给api登录后的web页面用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:52:47