Laravel Sanctum可选登录用户路由配置问题求助
解决方案
要实现登录用户返回user、访客返回Guest的需求,你需要调整路由中间件和控制器的验证逻辑:
1. 修改路由配置
移除路由组上的auth:sanctum中间件,让该路由对所有请求开放:
Route::post('/profile', [TestController::class, 'test']);
2. 调整控制器验证逻辑
在控制器方法中,指定使用sanctum guard来检查用户登录状态,而非默认的web guard:
use Illuminate\Support\Facades\Auth; public function test() { if (Auth::guard('sanctum')->check()) { return 'user'; } else { return 'Guest'; } }
原因说明
- 原
auth:sanctum中间件是强制验证机制,只要请求没有携带有效Sanctum令牌,就会直接返回401未授权,无法进入控制器逻辑。 - 不使用该中间件时,
Auth::check()默认调用webguard,而Sanctum的API登录状态绑定在sanctumguard上,因此无法识别已登录的API用户。通过指定Auth::guard('sanctum')->check(),可以直接验证请求中的Sanctum令牌,从而正确识别登录状态。
内容的提问来源于stack exchange,提问作者sadasdadssad
相关产品推荐
相关产品推荐

