使用访问令牌重置环回密码

Ove*_*vis 4 javascript node.js angularjs strongloop loopbackjs

我正在一个使用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"
}
...
Run Code Online (Sandbox Code Playgroud)

auth.js

...
resetPassword: function(user) {
    return MyUser.prototype$updateAttributes(user, user).$promise;
}
...
Run Code Online (Sandbox Code Playgroud)

Ove*_*vis 5

找出问题所在。在我们应用的服务器中,我们没有使用Loopback的令牌中间件。app.use(loopback.token());在启动服务器之前进行添加会导致重置链接中提供的访问令牌按预期工作!