扩展用户和访问令牌模型时不生成访问令牌 - 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 请求)