为什么需要在createToken方法中传递字符串?

时间:2020-07-01 17:42:21

标签: php laravel laravel-sanctum

要在Laravel Sanctum中创建访问令牌,需要在createToken方法内传递一个字符串。我觉得这很奇怪,因为无论您传入什么,都可以使用SHA-256进行散列,也可以获取纯文本令牌。

为什么不只是基于随机字符串创建访问令牌?例如,使用Str::random(10)可以轻松完成此操作。我不太确定叫什么名字。

1 个答案:

答案 0 :(得分:2)

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

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

例如,如果您可能有两种不同类型的令牌,一种是针对网络的令牌,另一种是针对移动应用的令牌,并且每种令牌的有效期都不同,那么您可以将每种类型的令牌归类为“ web-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);
}

这未经测试,但可以正常工作。