Laravel Sanctum v3中如何从请求获取当前个人访问令牌?
Laravel Sanctum v3 获取当前认证令牌的正确方法
- 你之前的两种方法错误原因:
Auth::user()->token无效:User模型本身没有token属性,Sanctum的令牌数据存储在personal_access_tokens表中,与用户是一对多关联,需通过关联关系或当前请求上下文获取。PersonalAccessToken::find(Auth::id())无效:find()方法是按令牌的主键id查询,而Auth::id()是用户的ID,两者不匹配,自然返回null。
正确获取当前使用的令牌实例
Laravel Sanctum提供了currentAccessToken()方法,可直接获取当前请求所使用的令牌对象:
use Illuminate\Support\Facades\Auth; $currentToken = Auth::user()->currentAccessToken(); return response()->json([ 'token_id' => $currentToken->id, 'token_name' => $currentToken->name, 'abilities' => $currentToken->abilities, 'last_used_at' => $currentToken->last_used_at, // 注意:数据库中存储的是哈希后的令牌,$currentToken->token为哈希值 'hashed_token' => $currentToken->token, ], 200);
关于明文令牌的说明
明文访问令牌仅在创建时可以获取,因为数据库中存储的是哈希后的令牌(出于安全考虑,无法从哈希值还原明文)。创建令牌的示例代码:
// 创建令牌时返回明文令牌,需自行保存(比如返回给前端) $plainTextToken = Auth::user()->createToken('API Token')->plainTextToken;
之后任何请求都无法再从服务器端获取该明文令牌,只能通过currentAccessToken()获取令牌的元数据和哈希值。
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

