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

Laravel 5.5如何获取自定义用户的accessToken?

解决Laravel Passport获取指定用户accessToken返回null的问题

嘿,我来帮你一步步排查这个问题:

1. 先修正方法拼写和调用方式

你代码里的AauthAcessToken()明显是拼写错误啦!正确的方法名是accessTokens()(或者tokens(),两者等价,都是Passport的HasApiTokens trait提供的)。调用时要注意:

  • 想直接获取用户的所有token集合,用属性调用:$user->accessTokens
  • 如果用方法调用,需要追加->get()来执行查询:$user->accessTokens()->get()
    拼写错误是最容易踩的坑,要么会报错,要么直接返回null。

2. 确认目标用户存在有效token

返回null/空集合的另一个常见原因是:这个用户根本没有未过期、未被撤销的access token。你可以直接去数据库的oauth_access_tokens表验证:

  • 有没有user_id匹配目标用户ID的记录
  • 这些记录的revoked字段是否为0(未撤销状态)
  • expires_at时间是否晚于当前时间
    如果没有符合条件的记录,得先给用户生成token,比如用密码授权模式生成:
$token = $user->createToken('Custom Token')->accessToken;

3. 预加载关联提升效率(可选)

直接用User::where('id', $id)->first()查询用户时,默认不会预加载accessTokens关联。虽然调用$user->accessTokens会自动懒加载,但如果想主动一次性查询用户和关联token,可以这样写:

$user = User::with('accessTokens')->where('id', $id)->first();

这样能避免N+1查询问题,效率更高。

4. 区分「当前请求的token」和「用户所有token」

如果你混淆了token()和tokens()方法也会出问题:

  • Auth::user()->token()是获取当前请求正在使用的那个token,只对当前认证的用户有效。直接查询的非当前用户调用这个方法,肯定返回null。
  • 要获取指定用户的所有有效token,应该用筛选查询:
$validToken = $user->tokens()
    ->where('revoked', false)
    ->where('expires_at', '>', now())
    ->first();

内容的提问来源于stack exchange,提问作者Hareesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:27