Laravel sanctum 限制每个用户的代币数量?

Laravel sanctum limit no of tokens for each user?

我正在使用 laravel sanctum 对我的移动应用进行 API 身份验证。

我们如何限制每个用户的最大活动令牌数?

目前,在personal_access_tokenssanctum生成的table中,没有user_id引用。使用当前 table,想象一下如果用户无限制地登录和注销。我们将在 table.

中创建 N 个新令牌

  1. 是否有一种默认方法可以开箱即用地限制每个用户的令牌总数,或者这需要我自己完成?
  2. 在每次新登录时将新的令牌行添加到数据库 table 是一种好做法吗?

有对user的引用,即tokenable_typetokenable_id。在这种情况下引用 App\Models\Usertokenable_id.

中的用户 ID

在您的应用程序的某个地方,您正在为该特定用户创建这些令牌。您可以在此处选择为每个登录会话颁发新令牌,但您也可以要求用户使用旧令牌。这取决于您和应用程序的用例。

但是,如果您要为每个登录会话创建新令牌,请考虑撤销旧令牌(因为它们可能不再使用)。检查 Sanctum documentation.

令牌在 expiration 键中的 config/sanctum.php 中定义的期限内有效。标准,personal access tokens不会过期,因为expiration键设置为null.

回答您的问题:

  1. 是的,您可以使用 $user->tokens()->count(); 简单地获取代币数量,然后用它做任何您想做的事情(删除旧代币,或返回错误)。
  2. 这个答案取决于您的用例。如果 tokens 永远有效,为什么要在每次登录时创建一个新的,而不是要求仍然有效的令牌?或者,您可以为用户创建一个表单,以便在他们忘记旧令牌时请求新令牌,删除旧令牌并颁发新令牌。这样,数据库中的所有令牌都是有效的。