Loopback的$owner在findById方法中无效。

7

我想使用LoopBack获取有关我的用户的一些信息。为此,我创建了一个与"accessToken"模型相关联的"user"模型,到目前为止,在"/user"上进行POST,在"/user/login"上进行POST以及在"/user/logout"上进行POST都是可行的。

我在"/common/models/user.json"中添加了:

{
  "name": "user",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "accessToken",
      "foreignKey": "userId"
    }
  },
  "acls": [
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "logout"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW",
      "property": "findById"
    }
  ],
  "methods": {}
}

当我在/user/{id}上执行GET操作时,我得到了:

{
  "error": {
    "statusCode": 401,
    "name": "Error",
    "message": "Autorisation requise",
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: Autorisation requise\n    at..."
  }
}

我想我对acl/relation的理解不是很透彻。


你能检查一下你的 model-config.json 文件,确保内置的 User 模型不是公开的吗?有可能你正在路由到它而不是你自定义的用户模型。此外,findById 映射到 READ accessType - Ivan Schwarz
请将 "accessType": "EXECUTE" 更改为 "accessType": "*",然后检查。 - IftekharDani
你的Loopback应用程序是否启用了令牌授权?如果是,你应该在/user/{id}请求中提供访问令牌。 - Serg
1个回答

0
这可能是因为您只允许$owner执行findById

为了限定$owner,目标模型需要与User模型(或扩展User的模型)具有belongsTo关系和与目标模型实例外键匹配的属性。仅针对路径上带有':id'的远程方法执行$owner检查,例如GET /api/users/:id。

  1. 确保您提供的accessToken是所寻找的userid的所有者。
  2. 如果您不确定,请尝试将“principalId”:“$owner”替换为“principalId”:“$authenticated”,然后您就会知道是否存在问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接