使用auth:sanctum中间件登出时session表user_id字段未置空问题
问题解决:使用auth:sanctum中间件时session表user_id未置空
问题原因
当路由挂载auth:sanctum中间件时,当前请求的认证上下文是sanctum guard,而你之前的代码调用Auth::guard('web')->logout()仅处理了web guard的认证状态,并没有更新sanctum guard关联的session记录,导致session表的user_id字段无法被置空。
解决方案
调整登出逻辑,使用sanctum guard执行登出操作,修改后的代码如下:
Route::post('/logout', function (Request $request) { // 用sanctum guard执行登出,匹配中间件的认证上下文 Auth::guard('sanctum')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return ['done' => 'ok']; })->middleware('auth:sanctum');
或者更简洁的写法,Auth::logout()会自动识别当前请求的认证guard:
Route::post('/logout', function (Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return ['done' => 'ok']; })->middleware('auth:sanctum');
补充说明
你采用的是session+cookie配合Sanctum的认证模式,此时Sanctum会通过自身的guard维护会话与用户的关联,必须对应使用sanctum guard执行登出,才能正确更新session表的user_id字段。
内容的提问来源于stack exchange,提问作者none
相关产品推荐
相关产品推荐

