一个很常见的功能,用户忘记密码了,通过输入之前注册的邮件,我们向用户的邮箱发一个链接以重设密码。用户名 + 随机字符串+过期时间,之后用md5加密一下,这样的设计是否可行?如果用户没有点击链接,已过期的标识符要如何清除?
回复内容:
一个很常见的功能,用户忘记密码了,通过输入之前注册的邮件,我们向用户的邮箱发一个链接以重设密码。用户名 + 随机字符串+过期时间,之后用md5加密一下,这样的设计是否可行?如果用户没有点击链接,已过期的标识符要如何清除?
整个流程:
- 注册时要求每个用户使用唯一的邮箱,注册后向用户的邮箱发一封邮件
- 找回密码时要求用户填写邮箱地址,提示用户如果不记得地址请在邮箱中搜索
- 找回密码功能限制每帐号每天只能使用三次(只能发三次邮件), 使用缓存来完成这个计数
- 找回密码时向缓存中写入一个随机的字符串作为 Token, 有效期为一天,向用户的邮箱发送包含 Token 的链接
- 用户从链接点回来先验证 Token 的有效性,然后提示填写新密码,然后将新密码和 Token 一起提交给后端完成修改密码的操作
- 删除掉 Token 的缓存