为什么需要在 createToken 方法中传递一个字符串?
Why does one need to pass a string in the createToken method?
要在 Laravel Sanctum 中创建访问令牌,需要在 createToken
方法中传递一个字符串。我觉得这很奇怪,因为无论您传入什么都会使用 SHA-256 进行哈希处理,或者您可以获取纯文本令牌。
为什么访问令牌不是基于随机字符串创建的?例如,可以使用 Str::random(10)
轻松完成。我不太确定该取什么名字。
您传递给 createToken 的字符串是令牌名称。
虽然您可能不需要它,但在某些用例中它会很有用。
例如,如果您可能有两种不同类型的令牌,一种用于网络,一种用于移动应用程序,并且每种类型都有不同的到期时间,那么您可以将每种类型分组到特定名称下,例如 'web-token' 和 'mobile-token'.
不是每个人都需要该功能,但是拥有它是件好事,您永远不知道什么时候会需要它。
如果你想自动生成一个随机名称,你可以简单地覆盖 createToken 方法来生成一个随机字符串,如下所示:
打开app/User.php并粘贴以下方法。
public function createToken(array $abilities = ['*'])
{
$token = $this->tokens()->create([
'name' => Str::random(10),
'token' => hash('sha256', $plainTextToken = Str::random(80)),
'abilities' => $abilities,
]);
return new NewAccessToken($token, $token->id.'|'.$plainTextToken);
}
这没有经过测试,但应该可以。
要在 Laravel Sanctum 中创建访问令牌,需要在 createToken
方法中传递一个字符串。我觉得这很奇怪,因为无论您传入什么都会使用 SHA-256 进行哈希处理,或者您可以获取纯文本令牌。
为什么访问令牌不是基于随机字符串创建的?例如,可以使用 Str::random(10)
轻松完成。我不太确定该取什么名字。
您传递给 createToken 的字符串是令牌名称。
虽然您可能不需要它,但在某些用例中它会很有用。
例如,如果您可能有两种不同类型的令牌,一种用于网络,一种用于移动应用程序,并且每种类型都有不同的到期时间,那么您可以将每种类型分组到特定名称下,例如 'web-token' 和 'mobile-token'.
不是每个人都需要该功能,但是拥有它是件好事,您永远不知道什么时候会需要它。
如果你想自动生成一个随机名称,你可以简单地覆盖 createToken 方法来生成一个随机字符串,如下所示:
打开app/User.php并粘贴以下方法。
public function createToken(array $abilities = ['*'])
{
$token = $this->tokens()->create([
'name' => Str::random(10),
'token' => hash('sha256', $plainTextToken = Str::random(80)),
'abilities' => $abilities,
]);
return new NewAccessToken($token, $token->id.'|'.$plainTextToken);
}
这没有经过测试,但应该可以。