最近公司开发android项目,用户可以通过注册的手机帐号登录,也可以通过第三方登录(QQ、新浪微博、微信),手机帐号可以绑定第三方帐号,第三方帐号也可以绑定手机帐号。
这里设计两张数据库表,一张是账号表,用来存储手机注册的帐号,或者第一次通过第三方登录之后,默认生成的帐号信息,另一张表是第三方帐号绑定关系表。
表结构如下(只暂时基础的字段):
user表(帐号表)
userid varchar(64),// 用户编号GUID,主键
username varchar(64),// 用户姓名
register_type int ,// 帐号生成类型,手机注册、QQ、微信、新浪微博
u_qq_key varchar(64),// 第三方登录QQ的唯一标识
u_wx_key varchar(64),// 第三方登录微信的唯一标识
u_xlwb_key varchar(64)// 第三方登录新浪微博唯一标识
thirdlogin(第三方登录帐号关联表)
thirdguid varchar(64),// 主键GUID
userid varchar(64),// 用户帐号GUID,外键
third_key varchar(64)// 第三方登录唯一标识
业务数据流向:
第三方登录
例如QQ登录,默认在user表中插入一条记录,register_type为QQ,u_qq_key为第三方QQ登录生成的唯一标识,同时在thirdlogin表中插入一条记录,userid为user表生成帐号的userid,third_key为第三方登录的唯一标识,其他第三方登录帐号类似。
首次注册手机帐号:
在user表中插入一条记录,register_type为手机,thirdlogin表不用操作
第三方帐号绑定手机帐号(以QQ帐号为例):
1)首先第三方帐号只能绑定手机帐号,不会存在直接的第三方帐号之间绑定,例如qq绑定新浪微博,这是不存在的。
2)第三方帐号未绑定手机帐号之前,使用第三方帐号登录,进入系统之后可以提示绑定手机帐号,绑定手机帐号需要把thirdlogin表中的之前的QQ帐号生成的那条记录的userid替换成绑定的手机帐号的userid,然后android系统的数据切换到绑定的手机帐号的数据上。
这个时候会存在一个情况,就是如果之前是第三方QQ帐号的信息都没有了,显示的都是新的手机帐号的数据。
3)如果需要看之前的第三方qq登录的时候数据信息的时候,需要解除绑定,然后用第三方qq登录之后查看。
手机帐号登录:
1)如果手机帐号之前未绑定第三方帐号:绑定qq帐号,假设这个qq帐号已经被其他手机帐号绑定过了,那么需要提示一下,但是依然可以继续绑定(因为具有该qq的操作权限),绑定之后,需要把thirdlogin表中的之前的QQ帐号生成的那条记录的userid替换成绑定的手机帐号的userid,如果之前没有用第三方帐号登录过,那么需要插入一条thirdlogin表中的记录。
2)如果第三方帐号已经绑定了手机帐号,那么用第三方帐号登录的时候,会自动关联手机帐号,实际上相当于使用的手机帐号登录。
3)解除第三方绑定,可以把third表中的第三方帐号的关联记录中的userid清空。