在环回中创建永久访问令牌

Creating Permanent AccessToken in loopback

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

我可以提高访问令牌 (ttl) 的有效性,如前所述 here

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

你混淆了两种不同的东西。 AccessToken 条目创建和 AccessToken 的 ttl 值。

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

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

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

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

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

allowEternalTokens Boolean Allow access tokens that never expire.

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 以指向自定义用户模型.

有关自定义 user/access 代币模型的更多信息,请点击此处:http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models