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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:03:28