【发布时间】:2015-12-18 18:36:49
【问题描述】:
我正在开发一个使用 Loopback 作为框架的项目,其中包括用户和身份验证。我添加了一个生成并在电子邮件中发送的密码重置路由,一切似乎都正常工作。最近,我发现密码重置似乎不起作用。这里重置密码的流程是:
- 为用户调用密码重置方法
- 从重置事件发送电子邮件,包括用户 ID 和访问令牌
- 从重置链接,将 $http.defaults.headers.common.authorization 设置为传递的令牌
- 调用 user.prototype$updateAttributes(由 lb-ng 生成)根据表单更新密码属性
预期的行为是密码将在密码重置表单上更新。相反,我得到一个授权错误,要么是 401 要么是 500(似乎来回走动)。我注意到在发送到 API 的实际标头中,授权令牌与我从路由传递的内容不匹配。尝试使用 LoopBackAUth.setUser 设置它不起作用,并且在实际发送请求之前也不会更新授权属性。
我在第一次添加它时确实花了时间测试它,但我不知道会发生什么改变来破坏它。我一直在关注 loopback-faq-user-management 中的示例,但在该示例中我们有一个 Angular 前端而不是服务器端视图。
编辑:
我尝试完全打开 ACL 以查看是否可以更新我的用户对象(它继承自 User,但它自己的类型)的密码(或任何属性)。尝试执行此操作时,我仍然收到 401。
编辑#2:
这是我的 ACL 和我如何调用它的示例代码。
模型定义中的 ACL
...
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "updateAttributes"
}
...
auth.js
...
resetPassword: function(user) {
return MyUser.prototype$updateAttributes(user, user).$promise;
}
...
【问题讨论】:
-
我完全被这个迷惑了。为什么我无法更新我自己的任何属性?
-
你能附上你的一些代码吗? 401 似乎表明您无权在这里做某事
-
编辑帖子以包含相关的小片段。
标签: javascript angularjs node.js loopbackjs strongloop