【问题标题】:Why do I get error 401 when I query items of user?为什么我在查询用户项目时会收到​​错误 401?
【发布时间】:2015-07-04 17:04:03
【问题描述】:

在 StrongLoop API Explorer 中,我可以选择查询:

/People/{id}/food_prefs

Person 基于内置的 User 模型。此查询应返回该人(用户)的所有 food_prefs 的 JSON 列表。相反,我收到关于授权的 401 错误。

模型关系如下:

Person has many food_prefs
food_pref belongs to Person (foreign key: personId)

food_pref 模型如下所示:

property: type : number
property: personId : number

当我向 Person/{id}/food_pref 发送请求时,我收到错误 401:

{
  "error": {
    "name": "Error",
    "status": 401,
    "message": "Authorization Required",
    "statusCode": 401,
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: Authorization Required\n
}

我还没有设置任何 ACL,但即使我设置了它以供所有人访问,我仍然会收到此错误。为什么?

【问题讨论】:

  • 在向 API 发出请求之前,您首先需要验证您的身份。在请求中包含为身份验证返回的会话 ID。
  • 我试过了,我得到了身份验证令牌并在资源管理器中设置了令牌,仍然没有运气。同样的错误。这很奇怪,因为我可以查询相反的 /food_prefs/{id}/person 并获取拥有该 food_pref 的人的用户 ID 和电子邮件信息。
  • 我也做了 slc loopback:acl 并将 person 设置为每个人都可以访问所有方法,即使这样也没有用。
  • 基本用户模型 acl 怎么样?您是否尝试更改它们以查看它是否会影响您的子模型?
  • 在一个更简单的模型中,我尝试将其添加到 common/models { "accessType": "EXECUTE", "principalType": "ROLE", "principalId": "$everyone 下的 person.json ", "permission": "ALLOW", "property": "_get_toys" } 有效,但对 _get_food_prefs 无效,我想知道该属性是否命名为其他名称。

标签: node.js relationship http-status-code-401 strongloop loopback


【解决方案1】:

答案是将以下权限添加到 Person 模型中的 ACL 部分。文件名是common/models/person.json:

{ "accessType": "EXECUTE", 
  "principalType": "ROLE", 
  "principalId": "$everyone", 
  "permission": "ALLOW", 
  "property": "__get__foodPrefs" 
}

可以为其他方法设置类似的属性,例如用于扩展模型的方法,例如在 common/models/person.js 中设置的名为“getList”的远程方法。您只需将 __get__foodPrefs 替换为 getList。请务必注意,自动生成的方法(例如上面的一个)有两个下划线而不是一个。

另外,其他权限可以是$authenticated、$owner等。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2022-01-20
    相关资源
    最近更新 更多