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

Laravel 8 API使用Passport时如何登出并撤销所有OAuth令牌

问题原因

  • 你调用的revoke()方法本身就不会删除oauth_access_tokens表的条目,只是将对应条目的revoked字段标记为1,表示令牌失效,所以数据库条目会保留。
  • 你现有代码仅处理当前请求携带的单条令牌,就算做删除操作也只能实现单设备登出,无法满足全设备登出的需求。

修复方案

场景1:全设备登出(删除当前用户所有令牌)

直接调用tokens()关系的delete()方法批量删除对应用户的所有令牌,修改后的logout方法如下:

public function logout(Request $request){
    // 直接清空该用户所有access token记录
    $request->user()->tokens()->delete();
    return response(['message'=> 'Je bent uitgelogd'], 200);
}

场景2:仅当前设备登出(仅删除当前请求使用的令牌)

如果不需要全设备登出,仅失效当前请求用的令牌,可以用以下写法:

public function logout(Request $request){
    // 仅删除当前请求携带的这一条令牌记录
    $request->user()->currentAccessToken()->delete();
    return response(['message'=> 'Je bent uitgelogd'], 200);
}

补充说明

  • 确保你的User模型已经引入了Passport提供的Laravel\Passport\HasApiTokens trait,否则无法调用tokens()、currentAccessToken()等方法。
  • 如果你同时使用了refresh token功能,删除access token后也可以同步清理对应的refresh token记录,避免残留无效数据。

内容的提问来源于stack exchange,提问作者M.Koops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:05