β

邮件密码找回功能实现

跬步 569 阅读

思路

公司做项目,有用到注册,登录,密码找回等功能,以前自己写的论坛也实现了邮件密码找回,不过比较简单,直接生成随机密码,把新密码发送到用户邮箱.比较不安全,要实现一般网站的用链接找回的功能.

对链接的要求有如下:

  1. 每次生成的链接都必须不一样;
  2. 链接要有过期时间,过期以后无效;
  3. 后台在链接被请求时,必须验证链接是否有效.

针对这3方面的要求,设计url格式, /resetpassword/?sid=md5加密后的字符串&user=用户名&expires=过期时间时间戳 .在user表上增加字段 secret_key 用于保存加密的密钥.

加密过程,生成sid:

  1. 用户在请求 /forgot/ 表单输入邮件地址,时后台校验用户是否存在,如果存在则,通过uuid生成随机字符串 secret_key 更新用户信息;
  2. 获取当前时间戳+过期时间,生成过期的时间戳;
  3. md5加密 username-expires-secret_key 生成sid.

解密验证:

  1. 后台获取到 /resetpassword/ GET 请求后,先验证参数是否正确;
  2. 通过username获取用户信息;
  3. 判断过期时间是否过期;
  4. md5加密 username-expires-secret_key 与sid对比是否一致,如一致才会返回重置密码表单;
  5. 重置密码表单提交时 POST 请求提交地址与 GET 请求一致,必须再次验证sid.
作者:跬步
On Coding
原文地址:邮件密码找回功能实现, 感谢原作者分享。