手机验证码登录
符号说明:
[]:表示可选或某些条件下流程。
需求说明:
用户可在登录页面使用手机验证码登录,若该手机号未绑定则输入验证码后还需输入用户账号密码进行绑定,绑定后则成功使用验证码登录。
用户可在控制台进行新增、修改、删除绑定手机号的操作。每个用户最多绑定两个手机号。
1.流程分析
a.输入手机号点击发送验证码 —> b.输入验证码点击确认按钮 —> [c.未绑定的手机号需要绑定到用户]
每一步都需要向后台发送一个请求,三个请求组成一个流程。通过Redis保存请求间的联系。关于SpringMVC集成Redis可参考文章:Redis单点与集群连接。
ps:为什么要使用Redis? Redis存取方便,性能更好,并可以方便的控制对象的存活时间。
直接使用短信验证码登录,新绑定手机号,与修改手机号主要流程相同但部分细节方面需要进行不同的处理,使用策略模式实现不同细节的处理。
2.代码逻辑
2.1 Controller层
2.1.1 登录页面发送验证码接口。对应流程a。参数为手机号,[是否为修改绑定的标识],[旧手机号码(若为修改绑定则必传)]。发送验证码到手机,接口返回一个随机数和一个标识是否首次绑定。
前端根据此标识调用不同接口,若已绑定过则调用2.1.2接口获取登录成功后的字段(如token信息);若未绑定则调用2.1.3接口进行绑定操纵。
后台可根据是否为修改绑定,是否为首次绑定调用不同的策略。具体策略下文细讲。
ps:发送验证码接口可生成一个随机数返回给前端,随机数作为key存放在Redis中,value中存放如手机号等校验验证码时需要的信息。
2.1.2 验证验证码接口。参数为验证码,接口2.1.1生成的随机数,其他登录所需校验参数。接口验证验证码是否正确。
若验证码正确则返回登录成功后的字段(如token)。
2.1.3 验证验证码接口。参数为验证码,接口2.1.1生成的随机数。返回一个随机数。
接口验证验证码是否正确,若验证码正确则生成随机数作为key存放在Redis中,value为手机号等信息。
2.1.4 绑定用户接口。参数为 用户名,密码,接口2.1.3生成的随机数,[是否使用改手机号登录标识,不传默认为false],[其他登录所需校验参数]。
校验通过后,将手机号存入数据库与用户关联。若登录标识为true,则返回登录成功后的字段(如token)。
2.2 Service层
Service层类图如下
抽象类提供了protected访问权限的公共方法(generateVC;verifyVC;userLogin());子类可按需调用。子类实现抽象方法实现每种情景下的访问细节。Controller层根据不同情况调用不同策略。
将我实现的手机验证码登录流程做个总结,希望有大佬可以指出其中的不足。