扩展用户和访问令牌模型时不生成访问令牌 - Loopback 3
Access Token is not generating when extending User and Access Token Model - Loopback 3
我是环回的新手。因此,作为学习过程的一部分,开始创建示例 API。还将 User 模型扩展为 Customer,将 AccessToken 扩展为 CustomerAccessToken。但问题是,当我们尝试登录已经使用 POST 请求发送的数据时,没有生成访问令牌。
使用凭据登录时的响应正文:
{
"id": "oiMDjErGGVkeSMtnt1SfHzGuERZf6OCId5FUulvir6A04htUbIV656FOBlXn9vDS",
"ttl": 1209600,
"created": "2019-05-09T09:41:05.184Z",
"userId": "5cd3f59594d45186b411bb02"
}
没有生成accessToken。我已经删除了内置的 User 和 AccessToken 模型并使用了扩展模型。
模型-config.json
{
"CustomerAccessToken": {
"dataSource": "db",
"public": false
}
"Customer": {
"dataSource": "db",
"public": true
}
}
customer.json
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "CustomerAccessToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
}
}
customerAccessToken.json
{
"name": "CustomerAccessToken",
"base": "AccessToken",
"properties": {},
"validations": [],
"relations": {
"user": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "userId"
}
},
"acls": [],
"methods": {}
}
再问一个问题:当我们尝试扩展 User 和 AccessToken 模型时,登录功能会起作用吗?或者我是否需要在 customer.js 文件中编写登录功能才能使其起作用。
任何帮助将不胜感激。
尝试使用 DEBUG 变量获取有关错误的更多详细信息。来自环回根调用
export DEBUG=loopback:security:access-context
npm start
到运行处于调试模式的服务器。然后你可以检查到底发生了什么——调用了哪个方法以及为什么你没有访问权限。
可能是 ACL 设置:默认情况下,您无法在环回中获取用户数据,因此您可能需要将 ACL 规则添加到 Customer 实体。我建议使用 loopback-cli for that - it's less error-prone. Then you select a model where you want to add a new rule and following the step-by-step instruction. You can read more about ACL here
除非您想实现多个用户模型,否则不要使用 CustomerAccessToken
。
这是最适合我的配置:
model-config.json
{
"User": {
"dataSource": "mysql",
"public": false
},
"AccessToken": {
"dataSource": "mysql",
"public": false,
"relations": {
"Customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "userId"
}
}
},
"Customer": {
"dataSource": "mysql",
"public": true
}
}
server.js
app.use(loopback.token({
model: app.models.accessToken,
currentUserLiteral: 'me'
}))
客户模型必须扩展用户模型:
customer.json
{
"name": "Customer",
"plural": "customers",
"base": "User"
}
除了响应。如果您想使用自己的 AccessToken 模型必须在 server.js
中进行设置
app.use(loopback.token({
model: app.models.CustomerAccessToken,
}));
我遵循了本教程。
https://youtu.be/Jx39u8IssRg
当通过用户控制器使用 'user' 登录时,我收到 Token 作为响应 body。
通过将 headers 中的“token”作为 'Bearer Token' 传递,我能够达到 to-do 模型的终点。我使用“postman”来达到 to-do 端点
(我无法 insert/attach 收到的令牌进入 loopback4 应用程序的 to-do 请求)
我是环回的新手。因此,作为学习过程的一部分,开始创建示例 API。还将 User 模型扩展为 Customer,将 AccessToken 扩展为 CustomerAccessToken。但问题是,当我们尝试登录已经使用 POST 请求发送的数据时,没有生成访问令牌。
使用凭据登录时的响应正文:
{
"id": "oiMDjErGGVkeSMtnt1SfHzGuERZf6OCId5FUulvir6A04htUbIV656FOBlXn9vDS",
"ttl": 1209600,
"created": "2019-05-09T09:41:05.184Z",
"userId": "5cd3f59594d45186b411bb02"
}
没有生成accessToken。我已经删除了内置的 User 和 AccessToken 模型并使用了扩展模型。
模型-config.json
{
"CustomerAccessToken": {
"dataSource": "db",
"public": false
}
"Customer": {
"dataSource": "db",
"public": true
}
}
customer.json
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "CustomerAccessToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
}
}
customerAccessToken.json
{
"name": "CustomerAccessToken",
"base": "AccessToken",
"properties": {},
"validations": [],
"relations": {
"user": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "userId"
}
},
"acls": [],
"methods": {}
}
再问一个问题:当我们尝试扩展 User 和 AccessToken 模型时,登录功能会起作用吗?或者我是否需要在 customer.js 文件中编写登录功能才能使其起作用。
任何帮助将不胜感激。
尝试使用 DEBUG 变量获取有关错误的更多详细信息。来自环回根调用
export DEBUG=loopback:security:access-context
npm start
到运行处于调试模式的服务器。然后你可以检查到底发生了什么——调用了哪个方法以及为什么你没有访问权限。 可能是 ACL 设置:默认情况下,您无法在环回中获取用户数据,因此您可能需要将 ACL 规则添加到 Customer 实体。我建议使用 loopback-cli for that - it's less error-prone. Then you select a model where you want to add a new rule and following the step-by-step instruction. You can read more about ACL here
除非您想实现多个用户模型,否则不要使用 CustomerAccessToken
。
这是最适合我的配置:
model-config.json
{
"User": {
"dataSource": "mysql",
"public": false
},
"AccessToken": {
"dataSource": "mysql",
"public": false,
"relations": {
"Customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "userId"
}
}
},
"Customer": {
"dataSource": "mysql",
"public": true
}
}
server.js
app.use(loopback.token({
model: app.models.accessToken,
currentUserLiteral: 'me'
}))
客户模型必须扩展用户模型:
customer.json
{
"name": "Customer",
"plural": "customers",
"base": "User"
}
除了server.js
app.use(loopback.token({
model: app.models.CustomerAccessToken,
}));
我遵循了本教程。 https://youtu.be/Jx39u8IssRg 当通过用户控制器使用 'user' 登录时,我收到 Token 作为响应 body。 通过将 headers 中的“token”作为 'Bearer Token' 传递,我能够达到 to-do 模型的终点。我使用“postman”来达到 to-do 端点 (我无法 insert/attach 收到的令牌进入 loopback4 应用程序的 to-do 请求)