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

Mik*_*chy 8 laravel laravel-sanctum

我正在使用 laravel sainttum 为我的移动应用程序进行 API 身份验证。

我们如何限制每个用户的最大活跃代币数量?

目前,在personal_access_tokenssainttum 生成的表中,没有 user_id 引用。对于当前的表,想象一下如果用户无限制地登录和注销。我们将在表中创建 N 个新令牌。

在此输入图像描述

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

Eri*_*eer 7

有一个参考user,即tokenable_typetokenable_id。在本例中,引用App\Models\Usertokenable_id.

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

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

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

回答您的问题:

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