Laravel Sanctum中用户令牌plainTextToken返回null问题咨询
Laravel Sanctum plainTextToken 为 null 是特性而非 Bug
- 这是Sanctum的设计特性,不是Bug。
- 核心原因:Sanctum生成令牌时,仅在令牌创建的瞬间返回
plainTextToken(明文令牌),这个明文值不会被存储到数据库中。数据库里的token字段存储的是该明文令牌的哈希值(也就是你看到的十六进制字符串)。 - 你代码里
Auth::user()->tokens->first()是从数据库读取已存在的令牌记录,此时plainTextToken必然为null——因为系统从一开始就没保存过这个明文值,只存了哈希后的结果。 - 正确做法:如果需要在JavaScript中使用令牌,必须在生成令牌的代码逻辑里,将返回的
plainTextToken传递给前端,由前端存储(比如localStorage)。后续前端请求时,用这个存储的明文令牌携带认证,后端会自动将其哈希后与数据库的token字段比对验证。
生成令牌时获取明文的示例:
// 生成令牌并获取明文值 $token = $user->createToken('auth_token')->plainTextToken; // 将明文令牌返回给前端 return response()->json(['token' => $token]);
内容的提问来源于stack exchange,提问作者inf3rno
相关产品推荐
相关产品推荐

