2

万事如意,

有人对密码重置的 Waterlock 流程有任何经验吗?我碰到了一堵墙,我可以看到一个解决方法,但它看起来真的很不优雅,所以我可能遗漏了一些东西。

当我通过带有电子邮件元素的身份验证/重置 POST 发送时,系统会按计划继续发送电子邮件。

然后,当我在 POST 请求中提交收到的链接时,带有密码元素,我看到“404”响应。

然而

如果我先将该链接作为 GET 请求提交,然后再提交 POST,它就可以工作。

当我查看 waterlock-local-auth 源时,重置 POST 操作正在测试请求对象中是否存在解密的令牌,然后才允许它继续。

所以

要么我对前端进行编码以发送一个获取请求(它没有正确响应),然后作为 POST 重新提交,要么我进入并破解 waterlock-local-auth 代码以包含令牌的解码(这就是我认为是最优雅的解决方案)。

有什么线索吗?

谢谢,

安迪

4

1 回答 1

1

我有类似的问题,但我使用 angularjs 作为我的前端。这个讨论线程非常有帮助:

https://github.com/waterlock/waterlock-local-auth/issues/7

基本上,您应该向密码重置电子邮件中收到的 url 提交 GET 请求。单击带有令牌的链接后,您会发现在您的数据库中创建了一条新的 ResetToken 记录,并且令牌列中的值与您在 url 中看到的值完全相同。然后你应该被重定向到forwardUrlin waterlock.js 设置,那里应该有一个表单或任何可以让你发布到的东西:

http://yourdomain.com/auth/reset?password=newpassword

然后密码被重置,ResetToken 记录将从您的数据库中删除。

如果你看handlePost这里的功能:

https://github.com/waterlock/waterlock-local-auth/blob/master/lib/controllers/actions/reset.js#L68

这可以解释为什么 POST 到重置密码电子邮件中发送给您的 url 返回 404。resetToken会话中必须已经存在才能issuePasswordReset被调用。唯一要设置的地方req.session.resetTokenvalidateToken方法内:

https://github.com/waterlock/waterlock-local-auth/blob/master/lib/controllers/actions/reset.js#L188

所以你首先需要一个获取请求。希望这可以帮助。

于 2016-02-21T22:49:54.047 回答