系统设计
现在几乎大部分的 App 都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。
这里不提供任何代码实操,这里梳理一下账号模块的设计,提供思路,仅供参考。
一、 自建的登陆体系
1.1 系统最初的登录设计
1.1.1 手机号登陆注册
该设计的思路是每个手机号对应一个用户,手机号为必填项。
流程:
- 首先输入手机号,然后发送到服务端。先判断该手机号是否存在账号,如果没有,就会生成随机验证码,将手机号和验证码绑定到 Redis中,并设置一定的过期时间(过期时间一般是5分钟,这就是一般手机验证码的有效期),最后将验证码通过短信发送给用户。
- 用户接收到验证码后,在界面填写验证码以及密码等基础信息,然后将这些数据发送服务端。服务端收到后,先判断在 Redis里面这个手机号对应的验证码是否一致,失败就返回错误码,成功就给用户创建一个账号和保存密码。
- 注册成功后,用户即可通过自己的 手机号+密码进行登陆。
问题:
- 用户体验差,需要完成获取验证码,填写验证码/密码/用户名等诸多的信息完成注册,然后才能使用;
- 容易遗忘密码,遗忘后,只能通过忘记密码来重新设置密码。
1.1.2 优化注册登陆
该方案的思路是弱化密码的必填性,即无论用户是否注册过,可通过 手机号+验证码 直接进行登陆(保留 手机号+密码登录的方式)。
流程:
- 输入手机号,然后发送到服务端。服务端生成随机验证码,将手机号和验证码绑定到 Redis中,并设置一定的过期时间(过期时间一般是5分钟,这就是一般手机验证码的有效期),最后将验证码通过短信发送给用户。
- 用户接收到验证码后,在界面只需填写收到的验证码,提交到服务端。服务端收到后,先判断在 Redis里面这个手机号对应的验证码是否一致,失败就返回错误码,成功就直接登录。如果是老用户,直接拉取用户信息;如果是新用户,则提示他可以完善用户信息(不强制)。
- 用户通过 手机号+验证码登录后,也可选择设置密码,然后就可以通过 手机号+密码的方式登录,即:密码是非必填项。
用户表设计: