[英]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.