问题
/auth/send-code 的 SendCodeRequest.purpose 允许三种取值,正则为 ^(login|register|reset_password)$,其中 reset_password 没有任何端点消费。用户可以申请一封重设密码的验证码邮件,但拿到验证码之后无处使用。
现有的 /auth/change-password 要求提供旧密码,忘记密码的用户恰好给不出旧密码。因此目前账号一旦忘记密码即无法恢复。
目标
提供邮箱加验证码重设密码的完整路径,使 reset_password 这个 purpose 有对应的落点。
范围
一个重设密码端点,以及重设成功后对既有会话的处理。
明确排除:短信验证码、密保问题、管理员代为重置、第三方账号找回。
验收标准
- 提交邮箱、
reset_password 用途的有效验证码与新密码,密码被重设,新密码可登录。
- 新密码沿用注册时的长度约束(8 到 128 位)。
- 验证码错误、过期或用途不匹配时拒绝,返回业务码而非 HTTP 错误。
- 重设成功后该用户既有的 refresh token 全部失效。
- 该端点纳入敏感接口限流名单。
问题
/auth/send-code的SendCodeRequest.purpose允许三种取值,正则为^(login|register|reset_password)$,其中reset_password没有任何端点消费。用户可以申请一封重设密码的验证码邮件,但拿到验证码之后无处使用。现有的
/auth/change-password要求提供旧密码,忘记密码的用户恰好给不出旧密码。因此目前账号一旦忘记密码即无法恢复。目标
提供邮箱加验证码重设密码的完整路径,使
reset_password这个 purpose 有对应的落点。范围
一个重设密码端点,以及重设成功后对既有会话的处理。
明确排除:短信验证码、密保问题、管理员代为重置、第三方账号找回。
验收标准
reset_password用途的有效验证码与新密码,密码被重设,新密码可登录。