【问题标题】:Creating Permanent AccessToken in loopback在环回中创建永久 AccessToken
【发布时间】:2015-12-20 16:41:01
【问题描述】:

如何为 StrongLoop API 创建永久访问令牌。现在,对于每个用户登录,它都会创建一个访问令牌。在我的数据库中不必要的条目

here 所述,我可以增加访问令牌(ttl)的有效性。

但它仍然会为新登录生成。

【问题讨论】:

    标签: access-token loopbackjs strongloop


    【解决方案1】:

    Loopback 有一个选项可让您创建永久访问令牌:

    allowEternalTokens Boolean 允许访问令牌永不过期。

    https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#advanced-options

    这就是我所做的:

    1. 为用户模型启用allowEternalTokens

      在 server/model-config.json 中:

      "User": {
        "dataSource": "db",
        "options": {
          "validateUpsert": true,
          "allowEternalTokens": true
        }
      },
      
    2. 登录时,将ttl设置为-1

      User.login(
      {
        email: email,
        password: password,
        ttl: -1,
      },
      
    3. 您已经知道,每次您登录时都会创建一个新的(不同的)访问令牌。因此,如果您想重复使用相同的访问令牌,只需登录一次。您可以从 AccessToken 模型(或直接从数据库中)获取访问令牌

      AccessToken.findOne(
      {
        where: {
          userId: userId,
        },
      },
      

    如果您有自定义用户模型,可以直接在模型定义文件中设置allowEternalTokens。此外,如果您有自定义用户模型,您还需要更新 AccessToken 模型的relations(如果有的话,可以是内置的,也可以是您的自定义模型)以指向自定义用户模型。

    在此处了解有关自定义用户/访问令牌模型的更多信息:http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models

    【讨论】:

    • 谢谢你的回答,帮了我很多:)
    【解决方案2】:

    你把两种不同的东西混在一起了。 AccessToken 条目的创建和 AccessToken 的 ttl 值。

    当用户登录时,会创建一个新的 AccessToken。如果用户注销 AccessToken 将被删除。如果用户登录 2 次,例如从 2 个不同的设备,那么您将获得 2 个 AccessToken,这样用户就可以同时从 2 个设备访问您的应用程序。

    如果用户想要从同一设备登录并且他已经拥有一个有效的令牌,您的应用应该能够识别这一点并自动让他登录。

    显然,如果 ttl 值过期,令牌将不再有效。如果尝试使用此令牌将被删除。我想如果你不想在你的数据库中记录这些记录,你可以创建一个自定义 cron 作业来删除过期的令牌。

    关于永久访问令牌,需要禁用 ttl 值,这对于默认的 AccessToken 模型目前是不可能的。我创建了一个pull request to support that,如果你有兴趣可以加入,看看它是否被合并。

    【讨论】:

    • Jesus Carrera,当你提到:'如果用户想从同一设备登录并且他已经拥有一个有效的令牌,你的应用程序应该识别这一点并自动让他登录。你的意思是。我在用户模型或扩展用户模型中找不到正确的方法来使用有效令牌登录用户,我可能遗漏了一些东西。我所看到的只是一种验证用户再次询问用户名/密码的方法,我知道如果用户拥有有效的令牌,这不是可行的方法吗?您能否提供一些有关如何使用有效令牌登录用户的见解?
    • 如果您有一个有效的访问令牌,您已经登录,您只需为每个需要身份验证的请求提供访问令牌。
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2013-10-07
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多