Laravel sanctum 限制每个用户的代币数量?
Laravel sanctum limit no of tokens for each user?
我正在使用 laravel sanctum 对我的移动应用进行 API 身份验证。
我们如何限制每个用户的最大活动令牌数?
目前,在personal_access_tokens
sanctum生成的table中,没有user_id引用。使用当前 table,想象一下如果用户无限制地登录和注销。我们将在 table.
中创建 N 个新令牌
- 是否有一种默认方法可以开箱即用地限制每个用户的令牌总数,或者这需要我自己完成?
- 在每次新登录时将新的令牌行添加到数据库 table 是一种好做法吗?
有对user
的引用,即tokenable_type
和tokenable_id
。在这种情况下引用 App\Models\User
和 tokenable_id
.
中的用户 ID
在您的应用程序的某个地方,您正在为该特定用户创建这些令牌。您可以在此处选择为每个登录会话颁发新令牌,但您也可以要求用户使用旧令牌。这取决于您和应用程序的用例。
但是,如果您要为每个登录会话创建新令牌,请考虑撤销旧令牌(因为它们可能不再使用)。检查 Sanctum documentation.
令牌在 expiration
键中的 config/sanctum.php
中定义的期限内有效。标准,personal access tokens
不会过期,因为expiration
键设置为null
.
回答您的问题:
- 是的,您可以使用
$user->tokens()->count();
简单地获取代币数量,然后用它做任何您想做的事情(删除旧代币,或返回错误)。
- 这个答案取决于您的用例。如果
tokens
永远有效,为什么要在每次登录时创建一个新的,而不是要求仍然有效的令牌?或者,您可以为用户创建一个表单,以便在他们忘记旧令牌时请求新令牌,删除旧令牌并颁发新令牌。这样,数据库中的所有令牌都是有效的。
我正在使用 laravel sanctum 对我的移动应用进行 API 身份验证。
我们如何限制每个用户的最大活动令牌数?
目前,在personal_access_tokens
sanctum生成的table中,没有user_id引用。使用当前 table,想象一下如果用户无限制地登录和注销。我们将在 table.
- 是否有一种默认方法可以开箱即用地限制每个用户的令牌总数,或者这需要我自己完成?
- 在每次新登录时将新的令牌行添加到数据库 table 是一种好做法吗?
有对user
的引用,即tokenable_type
和tokenable_id
。在这种情况下引用 App\Models\User
和 tokenable_id
.
在您的应用程序的某个地方,您正在为该特定用户创建这些令牌。您可以在此处选择为每个登录会话颁发新令牌,但您也可以要求用户使用旧令牌。这取决于您和应用程序的用例。
但是,如果您要为每个登录会话创建新令牌,请考虑撤销旧令牌(因为它们可能不再使用)。检查 Sanctum documentation.
令牌在 expiration
键中的 config/sanctum.php
中定义的期限内有效。标准,personal access tokens
不会过期,因为expiration
键设置为null
.
回答您的问题:
- 是的,您可以使用
$user->tokens()->count();
简单地获取代币数量,然后用它做任何您想做的事情(删除旧代币,或返回错误)。 - 这个答案取决于您的用例。如果
tokens
永远有效,为什么要在每次登录时创建一个新的,而不是要求仍然有效的令牌?或者,您可以为用户创建一个表单,以便在他们忘记旧令牌时请求新令牌,删除旧令牌并颁发新令牌。这样,数据库中的所有令牌都是有效的。