1

要在 Laravel Sanctum 中创建访问令牌,需要在createToken方法中传递一个字符串。我觉得这很奇怪,因为您传入的任何内容要么使用 SHA-256 进行哈希处理,要么您可以获取纯文本令牌。

为什么访问令牌不是基于随机字符串创建的?例如,它可以很容易地完成Str::random(10)。我不太确定要传递什么名字。

4

1 回答 1

3

您传递给 createToken 的字符串是令牌名称。

虽然您可能不需要它,但在某些用例中它会很有用。

例如,如果您可能有两种不同类型的令牌,一种用于网络,一种用于移动应用程序,并且每种类型都有不同的到期时间,那么您可以将每种类型分组到特定名称下,例如“web-token”和“mobile” -令牌'。

不是每个人都需要这个功能,但拥有它是件好事,你永远不知道什么时候需要它。

如果你想自动生成一个随机名称,你可以简单地覆盖 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);
}

这未经测试,但它应该可以工作。

于 2020-07-01T18:26:48.773 回答