在环回中创建永久AccessToken

时间:2015-09-23 11:25:00

标签: access-token loopbackjs strongloop

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

我可以像here那样提高访问令牌(ttl)的有效性。

但它仍会为新登录生成。

2 个答案:

答案 0 :(得分:7)

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

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

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

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

关于永久访问令牌,它需要禁用ttl值,而目前暂时无法访问默认的AccessToken模型。我创建了一个pull request to support that,如果您感兴趣,可以插入并查看它是否合并。

答案 1 :(得分:6)

Loopback有一个选项,允许您创建永久访问令牌:

  

allowEternalTokens布尔允许访问永不过期的令牌。

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,
      },
    },
    
  4. 如果您有自定义用户模型,则可以直接在模型定义文件中设置allowEternalTokens。此外,如果您有自定义用户模型,则还需要更新AccessToken模型的relations(如果有的话,可以更新内置的模型或自定义模型)以指向自定义用户模型

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