邮件密码找回功能实现
Jun 4 2015思路
公司做项目,有用到注册,登录,密码找回等功能,以前自己写的论坛也实现了邮件密码找回,不过比较简单,直接生成随机密码,把新密码发送到用户邮箱.比较不安全,要实现一般网站的用链接找回的功能.
对链接的要求有如下:
- 每次生成的链接都必须不一样;
- 链接要有过期时间,过期以后无效;
- 后台在链接被请求时,必须验证链接是否有效.
针对这3方面的要求,设计url格式,/resetpassword/?sid=md5加密后的字符串&user=用户名&expires=过期时间时间戳
.在user表上增加字段secret_key
用于保存加密的密钥.
加密过程,生成sid:
- 用户在请求
/forgot/
表单输入邮件地址,时后台校验用户是否存在,如果存在则,通过uuid生成随机字符串secret_key
更新用户信息; - 获取当前时间戳+过期时间,生成过期的时间戳;
- md5加密
username-expires-secret_key
生成sid.
解密验证:
- 后台获取到
/resetpassword/
的GET
请求后,先验证参数是否正确; - 通过username获取用户信息;
- 判断过期时间是否过期;
- md5加密
username-expires-secret_key
与sid对比是否一致,如一致才会返回重置密码表单; - 重置密码表单提交时
POST
请求提交地址与GET
请求一致,必须再次验证sid.