本片文章主要讲解一下,登陆的三种方式,以及数据库的设计和业务流程的设计。
一、前期准备
1. 如果要支持短信验证码登陆:需要注册第三方短信平台,并研究其集成接口。
2. 如果要支持第三方登陆(如QQ,微信,微博等):需要到对应的开放平台进行注册,客户端可以自己根据对应平台的集成接口进行处理,也可以用一些第三方平台,如友盟
二、数据库设计
1.用户基础信息表user_bases
字段名 | 描述 | ||
---|---|---|---|
id | 用户id,自增 | ||
username | 用户名 | ||
password | 密码 | ||
电子邮箱 | |||
phone | 手机号 | ||
nickname | 昵称 | ||
... | 更多的基础信息 |
2.用户认证信息表user_auths(如果不涉及第三方登陆,不用创建这个表)
字段名 | 描述 | ||
---|---|---|---|
id | 自增 | ||
uid | 关联用户user_bases的id | ||
third_key | 三方登陆唯一标识 | ||
third_type | 三方登陆类型(例如wx:微信,qq:QQ登陆,wb:微博) |
3. 说明
3.1 说一说登陆的具体处理
(1)用户名、手机号、email+密码登陆:
直接调用接口,传递账户名和密码,在user_bases表中查询并匹配password(password需要做加密处理)
(2)手机号+短信验证码登陆,分为两步:
a.发送验证码接口:客户端:调用发送验证码接口,携带手机号码。后台:调用第三方短信平台接口,返回验证码保存到redis中,并添加时效。
b.客户端收到短信验证码后填写,调用验证码登陆接口:首先验证验证码,正确的话再根据手机号查询用户信息。
(3)第三方登陆:
a.客户端首先调用三方平台提供的接口:返回唯一标识及用户信息(昵称,头像等)。
b.调用后台提供的三方登陆接口(携带上步返回的数据):
首先需要在user_auths表中查询third_key是否存在唯一标识,有:说明已经创建了用户,没有:未创建。
未创建时需要在user_auths中插入一条数据,然后再在user_auths中插入一条数据。
3.2 说一说一个账号绑定多个三方账号的具体处理
绑定多个三方账号的前提是:已存在一个账号。这样绑定三方账号时,只需在user_auths中插入一条数据即可(对应已存在的那个账号),这样就实现了一对多的关系。具体看下实现:
users
| id | username | password | email | phone | nickname | ...
| 1 | qaz123 |124568 |... |1523652.. | 张三 | ...
| 2 | lijds963 |985236 |... |1856321.. | 李四 | ...
user_auths
| id | uid | third_key |third_type|...
| 1 | 1 |*********** |weixin |...
| 2 | 1 |*********** |qq |...
| 3 | 2 |*********** |weixin |...
| 4 | 2 |*********** |qq |...
| 5 | 1 |*********** |weibo |...
三、时序图,业务流程
下图为三种登陆方式的时序图:
四、涉及到的接口
-
用户名、手机号、email+密码登陆:
(1)用户名、手机号、email+密码登陆接口
-
手机号+短信验证码登陆:
(1)发送验证码接口 (2)调用第三方短信平台接口(后台直接与三方交互,与客户端无关) (3)手机号+验证码登陆接口
-
三方登陆:
(1)通过三方提供的接口获取唯一标识和相关用户信息(客户端调用,与后台无关) (2)三方登陆接口
-
注册
(1)手机号+验证码注册
-
修改密码,绑定,解除绑定
(1)修改密码接口 (2)解除绑定,三方登陆接口 (3)绑定手机,三方登陆接口
说明:有些朋友可能会将三种登陆接口做成一个接口,也不是不行,但个人感觉这样代码能显得更独立,实现解耦,也方便修改。
五、小结
以上基本就能实现登陆,注册,验证码登陆,三方登陆,一绑多的需求。朋友们在看的时候,有什么问题可以随时评论。谢谢大家。