功能设计讨论 邮箱 短信 验证的时效性和一次性的实现
最近一直有一个想法就是把自己设计功能的思路分享给大家,希望通过讨论一个功能的实现并从讨论中学到更加好的方法和技巧
因为本人还在上学,没见过大场面 所以斗胆就先拿这一个小例子抛砖引玉
- 在开发中我们在登录注册或者其他的应用中,我们经常会使用到邮箱和短信登录
- 在设计邮箱和短信登录的时候,我们常常需要考虑到邮箱和短信时效和一次性的问题
-
场景一 需要实现邮箱改密功能,将修改密码的 url 发送给指定邮箱,url 点击一次后即失效
- 我的做法是生成一个 url 里面附带有用户的id和随机成的key
http://localhost/user/verifymail/id/{$id}/key/{$key}
- 发送时把key存入redis,mysql或者session
- 当用户点击后,先从url中取到key
- 比较 url 得到的 key与 redis,mysql或者session 中是否相同
- 如果相同就修改密码
- 在随机生成一个与之前不一样的key在存入redis,myqsl或者session中
- 如果不同返回链接失效
- 场景二 发送短信验证码,实现短信有效期3分钟
- 将短信生成的验证码使用字符串类型存入redis 并设置该字符串失效时间为3分钟
- 当用户接受短信后,从 redis 中取验证码,如果验证码存在则登录成功,否则超时
最后 想看看大家有什么更加好的设计方案吗,如果有希望可以指教一下
本作品采用《CC 协议》,转载必须注明作者和本文链接
中规中矩的规则,没什么大问题
在安全、 key/ 验证码、重复请求处理上优化一下