Vue3+Laravel Sanctum登出时出现500错误求助
Vue3 + Laravel Sanctum 登出500错误解决方案
问题现象
已实现Vue3+Laravel Sanctum的登录、注册及用户信息获取功能,但登出时触发500错误,Laravel日志提示:Method Illuminate\Auth\Request Guard::logout does not exist。
错误原因
当前登出路由使用了auth:sanctum中间件,此时请求上下文的默认认证Guard为sanctum,而sanctum Guard基于令牌认证,没有logout方法——logout是session驱动的web Guard专属方法。SPA场景下Sanctum的认证逻辑依赖令牌而非session,强行调用web Guard的logout会导致方法不存在的错误。
解决方案
Sanctum SPA场景的登出核心是删除用户的认证令牌,而非操作session。修改登出控制器代码如下:
方案1:删除用户所有令牌
适用于需要让用户所有设备下线的场景:
public function __invoke(Request $request) { // 删除当前用户的所有Sanctum令牌 $request->user()->tokens()->delete(); return response()->json(['message' => 'Logged out']); }
方案2:仅删除当前请求使用的令牌
适用于仅让当前设备下线的场景:
public function __invoke(Request $request) { // 删除当前请求对应的令牌 $request->user()->currentAccessToken()->delete(); return response()->json(['message' => 'Logged out']); }
额外说明
- 路由配置无需修改,保持
auth:sanctum中间件即可,确保只有认证用户能执行登出操作。 - 前端Pinia代码无需调整,
axios.defaults.withCredentials = true的配置正确,能保证请求携带认证cookie。
内容的提问来源于stack exchange,提问作者arisha
相关产品推荐
相关产品推荐

