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

Laravel Sanctum v3中如何从请求获取当前个人访问令牌?

Laravel Sanctum v3 获取当前认证令牌的正确方法
  • 你之前的两种方法错误原因:
    1. Auth::user()->token无效:User模型本身没有token属性,Sanctum的令牌数据存储在personal_access_tokens表中,与用户是一对多关联,需通过关联关系或当前请求上下文获取。
    2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:55:27