未经身份验证的用户
我们在端点PUT
上发出请求,api/v1/account/password
并要求带有相应帐户电子邮件的参数来标识用户想要重置(更新)密码的帐户:
PUT : /api/v1/account/password?email={email@example.com}
注意: 正如@DougDomeny在他的评论中提到的那样,将电子邮件作为 url 中的查询字符串传递是一种安全风险。GET 参数在使用时不会暴露https
(并且您应该始终https
为此类请求使用正确的连接),但还涉及其他安全风险。您可以在此博客文章中阅读有关此主题的更多信息。
在请求正文中传递电子邮件将比将其作为 GET 参数传递更安全:
PUT : /api/v1/account/password
请求正文:
{
"email": "email@example.com"
}
响应具有202
可接受的响应含义:
请求已被接受处理,但处理尚未完成。该请求最终可能会或可能不会被执行,因为在实际进行处理时它可能会被禁止。无法从诸如此类的异步操作中重新发送状态代码。
用户将收到一封电子邮件,email@example.com
更新请求的处理取决于对电子邮件中的链接采取的操作。
https://example.com/password-reset?token=1234567890
打开此电子邮件中的链接将指向前端应用程序上的重置密码表单,该表单使用链接中的重置密码令牌作为隐藏输入字段的输入(该令牌是作为查询字符串的链接的一部分)。另一个输入字段允许用户设置新密码。用于确认新密码的第二个输入将用于前端验证(以防止拼写错误)。
注意: 在电子邮件中我们还可以提到,如果用户没有初始化任何密码重置,他/她可以忽略电子邮件并继续使用他/她当前的密码正常使用应用程序
当表单使用新密码和令牌作为输入提交时,将进行重置密码过程。表单数据将PUT
再次与请求一起发送,但这次包括令牌,我们将用新值替换资源密码:
PUT : /api/v1/account/password
请求正文:
{
"token":"1234567890",
"new":"password"
}
响应将是204
无内容响应
服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息。响应可能包括实体头形式的新的或更新的元信息,如果存在,应该与请求的变体相关联。
经过身份验证的用户
对于想要更改密码的经过身份验证的用户,PUT
可以在没有电子邮件的情况下立即执行请求(我们正在更新密码的帐户是服务器已知的)。在这种情况下,表单将提交两个字段:
PUT : /api/v1/account/password
请求正文:
{
"old":"password",
"new":"password"
}