【问题标题】:Laravel sanctum limit no of tokens for each user?Laravel sanctum 限制每个用户的令牌数量?
【发布时间】:2021-09-24 06:50:19
【问题描述】:

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

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

目前,在personal_access_tokens sanctum 生成的表中,没有user_id 引用。使用当前表,想象一个用户是否可以无限制地登录和注销。我们将在表中创建 N 个新令牌。

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

【问题讨论】:

    标签: laravel laravel-sanctum


    【解决方案1】:

    有一个对user的引用,即tokenable_typetokenable_id。在这种情况下,它引用 App\Models\Usertokenable_id 中的用户 ID。

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

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

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

    回答您的问题:

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

    【讨论】:

    • 谢谢!我忽略了takenable_typetokenable_id,现在一切都说得通了!我想我会坚持每个用户拥有一个令牌。对于用户第一次登录,我只需要检查现有令牌或创建一个。我对在用户注销时删除令牌的另一个担忧,但我想我会为该用户保留令牌,因为用户可能会从多个设备(如 iphone 和 ipad)使用应用程序,因为令牌将保存在本地。
    猜你喜欢
    • 2022-10-20
    • 2021-07-02
    • 2020-07-04
    • 2023-04-07
    • 2021-06-04
    • 1970-01-01
    • 2021-11-09
    • 2013-08-16
    • 2021-08-05
    相关资源
    最近更新 更多