为什么需要在 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);
}

这没有经过测试,但应该可以。