如今幾乎大部分的App
都支持使用多個第三方帳號進行登陸,如:微信、QQ、微博等,咱們把此稱爲多帳號統一登錄。而這些帳號的表設計,流程設計相當重要,否則後續擴展性賊差。本文不提供任何代碼實操,可是梳理一下博主根據我司帳號模塊的設計,提供思路,僅供參考。html
該設計的思路是每一個手機號對應一個用戶,手機號爲必填項。安全
流程:服務器
Redis
中,並設置必定的過時時間(過時時間通常是5分鐘,這就是咱們通常手機驗證碼的有效期),最後將驗證碼經過短信發送給用戶。Redis
裏面這個手機號對應的驗證碼是否一致,,失敗就返回錯誤碼,成功就給用戶建立一個帳號和保存密碼。手機號+密碼
進行登錄。問題:微信
該方案的思路是弱化密碼的必填性,即不管用戶是否註冊過,可經過
手機號 + 驗證碼
直接進行登錄(保留手機號 + 密碼
登陸的方式)。網絡
流程:ide
Redis
中,並設置必定的過時時間(過時時間通常是5分鐘,這就是咱們通常手機驗證碼的有效期),最後將驗證碼經過短信發送給用戶。Redis
裏面這個手機號對應的驗證碼是否一致,失敗就返回錯誤碼,成功就直接登陸。若是是老用戶,直接拉取用戶信息;若是是新用戶,則提示他能夠完善用戶信息(不強制)。手機號 + 驗證碼
登陸後,也可選擇設置密碼,而後就能夠經過手機號 + 密碼
的方式登陸,即:密碼是非必填項。用戶表設計:優化
id | user_name | user_password | user_mobile | state | more |
---|---|---|---|---|---|
用戶id | 用戶名 | 用戶密碼 | 手機號碼 | 帳號狀態 | 其餘信息 |
進入 Web2.0
時代 ,微博開放了第三方網站登陸, 產品說, 這個咱們得要, 加個用微博賬號就能登陸咱們的App
吧,並且得和咱們本身的用戶表關聯。網站
流程:ui
access_token
,經過access_token
調取API
接口獲取用戶信息。微博用戶信息表設計:阿里雲
id | user_id | uid | access_token |
---|---|---|---|
主鍵id | 用戶id | 微博惟一id | 受權碼 |
緊接着, QQ又開放用戶登陸了, 微信開放用戶登陸了,網易開發用戶登陸了。。。。。。一會兒要接入好多家第三方登陸了, 只能按照 「微博用戶信息表」 新建一個表,重寫一套各個第三方登陸。
手機號 + 密碼
, 仍是 手機號 + 驗證碼
, 都是一種 用戶信息+密碼
的驗證形式;用戶信息+密碼
的形式, 用戶信息即第三方系統中的 ID
(第三方系統中的惟一標識), 密碼即 access_token
, 只不過是一種有使用時效按期修改的密碼。用戶基礎信息表:
id | nickname | avatar | more |
---|---|---|---|
用戶id | 暱稱 | 頭像 | 其餘信息 |
用戶受權信息表:
id | user_id | identity_type | identifier | credential |
---|---|---|---|---|
主鍵id | 用戶id | 登陸類型(手機號/郵箱) 或第三方應用名稱 (微信/微博等) | 手機號/郵箱/第三方的惟一標識 | 密碼憑證 (自建帳號的保存密碼, 第三方的保存 token) |
說明:
用戶基礎信息表
+ 用戶受權信息表
;手機號 + 驗證碼
沿用以前的方案。
郵箱/手機號 + 密碼
:用戶填寫 郵箱/手機號 + 密碼
; 請求登陸的時候, 先判斷類型, 如手機號登陸爲例:
使用 type= 'phone'
結合 identifier= '手機號'
查找, 若有, 取出並判斷 password_hash
(密碼)是否和該條目的 credential
相符, 相符則經過驗證, 隨後經過 user_id
獲取用戶信息;
查詢type= 'weixin'
結合 identifier= '微信 openId'
, 若是有記錄, 則直接登陸成功, 並更新token
; 假設與微信服務器通訊不被劫持的狀況下無需判斷憑證問題。
優勢:
phone_verified
和 email_verified
, 現在只要在用戶受權信息表中增長一個統一的 verified
字段, 每種登陸方式均可以直觀看到是否已驗證狀況;IP
地址, 就能夠更加完整地跟蹤用戶的使用習慣, 好比:已經不使用微博登陸兩年多, 已經綁定微信 300天;缺點 :
郵箱 + 新密碼
, 手機號 + 舊密碼
均可以登陸, 確定是很詭異的狀況;回顧一下手機號 + 驗證碼
的登陸方式:
但回過頭來想一下,爲何咱們須要驗證碼?驗證碼的做用就是肯定這個手機號是你的,那除了使用短信,是否還有別的方式對手機號進行認證?
SIM
卡數據查詢到。這就是該部分的主角:一鍵登陸。
獲取到當前手機使用的手機卡號,直接使用這個號碼進行登陸,這就是一鍵登陸。
這種登陸方式的好處是顯而易見的。它能夠更方便、快捷地完成註冊、登陸流程,將本來可能須要 20 秒的流程,縮短到了 2 秒左右,很大程度上提高了登陸的用戶體驗。
主要步驟以下:
目前阿里雲已經提供了該方式並可兼容三大運營商的號碼,詳見阿里雲SDK
博主看來,沒有最好的方案,選擇適用當前系統的設計便可。不要深究孰優孰劣,鞋合不合腳,只有腳知道。