在环回中创建永久AccessToken

Ram*_*eez 13 access-token strongloop loopbackjs

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

我可以增加访问令牌(TTL)的有效性提到这里.

但它仍然会产生新的登录.

bma*_*pin 8

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
      }
    },
    
    Run Code Online (Sandbox Code Playgroud)
  2. 登录时,设置ttl-1

    User.login(
    {
      email: email,
      password: password,
      ttl: -1,
    },
    
    Run Code Online (Sandbox Code Playgroud)
  3. 正如您已经想到的那样,每次登录时都会创建一个新的(不同的)访问令牌.因此,如果要重用相同的访问令牌,请仅登录一次.您可以从AccessToken模型(或直接从数据库)获取访问令牌

    AccessToken.findOne(
    {
      where: {
        userId: userId,
      },
    },
    
    Run Code Online (Sandbox Code Playgroud)

如果您有自定义用户模型,则可以allowEternalTokens直接在模型定义文件中进行设置.此外,如果您有自定义用户模型,则还需要更新relationsAccessToken模型(内置的模型或自定义模型)以指向自定义用户模型.

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


Jes*_*era 7

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

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

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

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

关于永久访问令牌,它将需要禁用ttl值,而这对于默认的AccessToken模型来说是不可能的.我创建了一个拉取请求以支持它,如果您感兴趣,可以插入并查看它是否合并.