用戶可以通過注冊的手機帳號登錄,也可以通過第三方登錄(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清空。