Laravel中如何获取已登录用户的Sanctum令牌?
获取已登录用户的Laravel Sanctum令牌
1. 查看用户已有的个人访问令牌
如果用的是Sanctum的个人访问令牌(给第三方应用、API客户端授权用),已登录用户的令牌可以直接通过关联模型获取:
// 在控制器或视图里调用 $tokens = auth()->user()->tokens;
返回的是Laravel\Sanctum\PersonalAccessToken实例集合,你可以遍历拿到令牌的ID、名称,但要注意:原始令牌字符串只有在创建时能拿到,数据库里存的是哈希后的值,没法恢复原令牌:
foreach ($tokens as $token) { echo "令牌名称:{$token->name}"; echo "令牌ID:{$token->id}"; // $token->token 是哈希值,不是原始令牌 }
2. 生成新令牌并返回给用户
如果需要在仪表盘里给当前用户生成新令牌(比如提供"创建新令牌"按钮),可以这么写:
// 生成带自定义名称的令牌,还能指定权限范围 $token = auth()->user()->createToken('仪表盘API访问令牌')->plainTextToken; // plainTextToken 就是可直接用的原始令牌,要返回给用户保存 return response()->json(['token' => $token]);
3. SPA场景下的令牌处理
如果你的仪表盘是SPA单页应用,用Sanctum做SPA认证的话,令牌会通过Set-Cookie头自动存在浏览器里,前端不用手动拿令牌字符串——Sanctum会自动处理cookie里的认证信息,直接调/api/user这类接口就能验证登录状态。
注意点
- 原始令牌仅创建时可见,生成后一定要让用户立刻保存,之后没法再从数据库里找回。
- 可以用
tokens()->where('name', '目标令牌名称')筛选特定名称的令牌。
内容的提问来源于stack exchange,提问作者Iam Loki
相关产品推荐
相关产品推荐

