邮箱找回密码

最近要开发个功能邮箱找回密码的功能。

大致思路就是发送邮件→连接邮件里的URL→修改密码

重点就是如何生成这个url和如何解析这个url.

需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url

是有效的

初步想法这个url有3个参数:用户名,过期时间,数字签名.

数字签名 = MD5(用户名+'$'+过期时间+密钥key)

解析这个url的时候先验证数字签名,在验证过期时间。

这个方法的弊端在于如果谁知道密钥key,就能修改任意用户密码。

为了保证这个密钥key的安全性,密钥key在应用每次启动的时候随机生成。

,还剩一个问题,就是一个url只能修改一次密码。

这样的话就需要每次修改完这个密码以后,给做一个标记(在内存中保存用户名,

过期时间,数字签名),然后现在每次解析url的时候先验证签名,

然后验证该url是否修改过密码,最后验证过期时间。

内存里的标记在超过过期时间以后是需要清除的。需要做一个定时任务一天清除以下内存里的

过期标记。好象这样就差不多拉。

然后开始开发,开发完以后本机跑的没啥问题。

忽然发现一个问题,生产环境下是多个应用的集群环境,这样的话多个应用随机生成的

密钥key是不一样的。

那这样密钥key的生成后,只有放到数据库比较好拉。

最后的方案:

数字签名 = MD5(用户名+'$'+过期时间+密钥key)

数据库字段(用户名(主键),密钥key,过期时间)

url参数(用户名,数字签名)

密钥key的生成:在每一个用户找回密码时候为这个用户生成一个密钥key

然后生成过期时间,生成数字签名,生成url,发送邮件.

saveOrUpdate(用户名,密钥key,过期时间)

解析url:首先根据用户名从数据库中查找出密钥key和过期时间,没有则表示该请求

是伪造的或者过期的,然后验证签名,验证过期时间,都验证通过,就可以修改密码,

密码修改完以后,删除数据库中的记录。

还需要加一个定时任务,删除数据库中当前时间大于过期时间的记录。

这样就应该没啥问题拉,欢迎大家拍砖.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值