Laravel登出功能报错:RequestGuard::logout方法不存在求助
Laravel登出功能报错:RequestGuard::logout方法不存在求助
兄弟,我之前踩过一模一样的坑!你应该是用了Sanctum做API认证对吧?这个RequestGuard确实没有logout()方法——因为Sanctum是基于令牌的认证逻辑,和传统Session认证那套不一样,传统的Auth::logout()是销毁会话,但Sanctum的“登出”本质上是撤销用户的访问令牌。
你看,你路由里用了auth:sanctum中间件,这时候当前的认证守卫是RequestGuard,它压根没实现logout方法,所以你直接调用的话肯定会报这个错。
给你改一下控制器里的logout方法,这才是Sanctum正确的登出姿势:
public function logout(Request $request) { // 撤销当前请求正在使用的那个令牌(最常用的场景) $request->user()->currentAccessToken()->delete(); // 如果你要一次性撤销这个用户的所有令牌(比如改密码后强制所有设备下线),可以用下面这行替换上面的 // $request->user()->tokens()->delete(); return response()->json(['message' => '登出成功'], 200); }
另外提醒你一下,别再调用Auth::logout()这类方法了,和Sanctum的逻辑不兼容,这就是你报错的核心原因。
备注:内容来源于stack exchange,提问作者Rasuli Naurizbaev
相关产品推荐
相关产品推荐

