![](/img/trans.png)
[英]Laravel Sanctum Retrieve PlainTextToken without creating a new token
[英]Why does Laravel Sanctum append token key to the plainTextToken?
参考 Sanctum 中的以下代码:
public function createToken(string $name, array $abilities = ['*'])
{
$token = $this->tokens()->create([
'name' => $name,
'token' => hash('sha256', $plainTextToken = Str::random(40)),
'abilities' => $abilities,
]);
return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);
}
为什么 Sanctum append $token->getKey()
到$plainTextToken
? 换句话说, $token->getKey()
部分的目的是什么? 它是否在身份验证期间用作检索加密令牌字符串并使用Hash::check
或其他方式进行比较的密钥?
我还有一个问题:创建 personal_access_tokens 表的迁移表明 token 列是唯一的。 但是,在上面的代码中,我可以看到存储在令牌列中的值只是随机字符串hash('sha256', $plainTextToken = Str::random(40))
的哈希值。 hash function 是否始终返回唯一值以便不违反唯一约束?
我的第一个想法是$token->getKey()
应该附加到加密字符串以使其唯一。 但我认为情况并非如此。
Sanctum createToken function创建一个40个字符的字符串,
Str::random(40)
然后对其进行哈希处理,但在进行哈希处理之前,将其存储到变量$plainTextToken中。
hash('sha256', $plainTextToken = Str::random(40))
散列令牌进入数据库,未散列令牌返回给用户。
$token = $this->tokens()->create([
'name' => $name,
'token' => hash('sha256', $plainTextToken = Str::random(40)),
'abilities' => $abilities,
]);
使用数据库记录的主键将未散列的部分返回给用户。 主键有助于快速找到令牌。 如果您删除主键,它也会起作用。
return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.