问题答案

一个很常见的功能,用户忘记密码了,通过输入之前注册的邮件,我们向用户的邮箱发一个链接以重设密码。用户名 + 随机字符串+过期时间,之后用md5加密一下,这样的设计是否可行?如果用户没有点击链接,已过期的标识符要如何清除?

标签: PHP
答案
整个流程:
 
注册时要求每个用户使用唯一的邮箱,注册后向用户的邮箱发一封邮件
找回密码时要求用户填写邮箱地址,提示用户如果不记得地址请在邮箱中搜索
找回密码功能限制每帐号每天只能使用三次(只能发三次邮件), 使用缓存来完成这个计数
找回密码时向缓存中写入一个随机的字符串作为 Token, 有效期为一天,向用户的邮箱发送包含 Token 的链接
用户从链接点回来先验证 Token 的有效性,然后提示填写新密码,然后将新密码和 Token 一起提交给后端完成修改密码的操作
删除掉 Token 的缓存
举一反三