这节我们继续Go项目的实战开发,首先再看一下项目要实现的功能的用例图
图中用户认证相关的功能我们已经开发完了,在前面的四节课中详细地记述了他们的设计和开发过程,这一节我们行进到功能用例的第二大部分--用户个人信息管理。
前面两节我们还埋下了一个扣,说用户在修改密码后需要把用户在所有登录平台上的Token和Session全部清除掉,强制用户在每个平台上用新密码重新登录,这也是一项安全措施。那么这一节我们就先来开发用户密码的修改/重置,
重置密码的流程拆解和安全防护
用户在登录态下修改和重置密码比较好实现,很多产品的逻辑是登录情况下输入原密码、新密码就可以修改,而用户在无登录状态下做上面这些操作即找回密码的功能则需要通过让用户填写服务器发送给他们的验证码,进行确认后才能为用户修改密码。
我们这里就直接分析重置密码的功能吧,这个功能在逻辑实现上更完善一些,拿来做修改密码功能也能用。
重置密码的整个流程中服务端内部做了什么,和客户端怎么交互的,我用一张顺序图给大家做了梳理。大家先看一下:
每个产品重置用户密码的功能实现跟这里说的可能有细微差别,但总体流程应该差不多。
客户端首先发起申请重置密码的请求,请求中需要提交它的邮箱/手机号
服务端验证用户是否存在、是否为正常状态,然后生成重置密码的Token和六位验证码
以Token为Key,将用户的ID和验证码存储到Redis,用于后续重置密码时的安全验证,缓存设置一个较短的有效期,比如半小时过期
通过邮件/短信的形式把验证码发送给用户

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



