扩展用户和访问令牌模型时,不会生成访问令牌-回送3

时间:2019-05-09 09:49:33

标签: node.js loopbackjs strongloop loopback

我是回环的新手。因此,作为学习过程的一部分,开始创建示例API。还将用户模型扩展为Customer,将AccessToken扩展为CustomerAccessToken。但是问题在于,当我们尝试登录已经使用POST请求发送的数据时,不会生成访问令牌。

使用凭据登录时的响应正文:

{
  "id": "oiMDjErGGVkeSMtnt1SfHzGuERZf6OCId5FUulvir6A04htUbIV656FOBlXn9vDS",
  "ttl": 1209600,
  "created": "2019-05-09T09:41:05.184Z",
  "userId": "5cd3f59594d45186b411bb02"
}

未生成accessToken。我已经删除了内置的User和AccessToken模型,并使用了扩展模型。

model-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文件中编写登录功能以使其起作用时,登录功能才能工作。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

尝试使用DEBUG变量来获取有关该错误的更多详细信息。来自回送根调用

export DEBUG=loopback:security:access-context
npm start

以调试模式运行服务器。然后,您可以检查到底发生了什么-调用了哪种方法以及为什么您没有访问权限。 可能是ACL设置:默认情况下,您无法在环回中获取用户数据,因此您可能需要将ACL规则添加到Customer实体。我建议为此使用loopback-cli-不太容易出错。然后,选择一个要在其中添加新规则的模型,并按照分步说明进行操作。您可以阅读有关ACL here

的更多信息

答案 1 :(得分:0)

除非要实现多个用户模型,否则不要使用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"
}

答案 2 :(得分:0)

除了Antonio Trapanis响应之外。如果要使用自己的AccessToken模型必须在server.js

中进行设置
app.use(loopback.token({
  model: app.models.CustomerAccessToken,
}));

答案 3 :(得分:0)

我遵循了本教程。 https://youtu.be/Jx39u8IssRg 通过用户控制器以“用户”身份登录时,我在响应正文中收到了 Token 。 我可以通过在标头中将“ token ”作为“ Bearer Token”传递到待办事项模型的终点。我使用“ 邮递员”达到了待办事项的终点 (我无法将收到的令牌插入/附加到loopback4应用程序的待办事项中)