【发布时间】:2015-12-20 16:41:01
【问题描述】:
如何为 StrongLoop API 创建永久访问令牌。现在,对于每个用户登录,它都会创建一个访问令牌。在我的数据库中不必要的条目
如here 所述,我可以增加访问令牌(ttl)的有效性。
但它仍然会为新登录生成。
【问题讨论】:
标签: access-token loopbackjs strongloop
如何为 StrongLoop API 创建永久访问令牌。现在,对于每个用户登录,它都会创建一个访问令牌。在我的数据库中不必要的条目
如here 所述,我可以增加访问令牌(ttl)的有效性。
但它仍然会为新登录生成。
【问题讨论】:
标签: access-token loopbackjs strongloop
Loopback 有一个选项可让您创建永久访问令牌:
allowEternalTokensBoolean 允许访问令牌永不过期。
https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#advanced-options
这就是我所做的:
为用户模型启用allowEternalTokens
在 server/model-config.json 中:
"User": {
"dataSource": "db",
"options": {
"validateUpsert": true,
"allowEternalTokens": true
}
},
登录时,将ttl设置为-1
User.login(
{
email: email,
password: password,
ttl: -1,
},
您已经知道,每次您登录时都会创建一个新的(不同的)访问令牌。因此,如果您想重复使用相同的访问令牌,只需登录一次。您可以从 AccessToken 模型(或直接从数据库中)获取访问令牌
AccessToken.findOne(
{
where: {
userId: userId,
},
},
如果您有自定义用户模型,可以直接在模型定义文件中设置allowEternalTokens。此外,如果您有自定义用户模型,您还需要更新 AccessToken 模型的relations(如果有的话,可以是内置的,也可以是您的自定义模型)以指向自定义用户模型。
在此处了解有关自定义用户/访问令牌模型的更多信息:http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models
【讨论】:
你把两种不同的东西混在一起了。 AccessToken 条目的创建和 AccessToken 的 ttl 值。
当用户登录时,会创建一个新的 AccessToken。如果用户注销 AccessToken 将被删除。如果用户登录 2 次,例如从 2 个不同的设备,那么您将获得 2 个 AccessToken,这样用户就可以同时从 2 个设备访问您的应用程序。
如果用户想要从同一设备登录并且他已经拥有一个有效的令牌,您的应用应该能够识别这一点并自动让他登录。
显然,如果 ttl 值过期,令牌将不再有效。如果尝试使用此令牌将被删除。我想如果你不想在你的数据库中记录这些记录,你可以创建一个自定义 cron 作业来删除过期的令牌。
关于永久访问令牌,需要禁用 ttl 值,这对于默认的 AccessToken 模型目前是不可能的。我创建了一个pull request to support that,如果你有兴趣可以加入,看看它是否被合并。
【讨论】: