不管什么應用,用戶賬號體系都可以設置兩張表,一張系統用戶表,一張真實信息表;
用戶表有OPEN_ID字段,真實信息表有手機號字段。
用戶進入系統,生成一條用戶數據;用戶驗證手機號后,生成一條真實信息數據;這條真實信息數據關聯了那條用戶數據;
沒有關聯真實信息的用戶,稱為游客;關聯了真實信息的用戶,稱為注冊用戶。
公眾號菜單入口進行微信網頁授權獲取用戶的OPEN_ID,並將其保存在COOKIE中;用戶驗證完手機號后,將手機號也存進COOKIE;
微信授權后,有OPEN_ID:
先從COOKIE中獲取手機號,得到空串或者手機號:
手機號查詢真實查詢真實信息:
找到真實信息,真實信息查詢用戶數據:
找到用戶數據,賦值OPEN_ID;——老用戶授權,完善或覆蓋OPEN_ID。
沒找到用戶數據,添加有OPEN_ID,真實信息主鍵ID的用戶數據;——手機號沒有關聯系統用戶,基本不會出現。
沒找到真實信息,OPEN_ID查詢用戶數據:
沒有找到,添加有OPEN_ID的用戶數據,稱之為游客;找打了,就不添加。——游客,也有可能是COOKIE-PHONE失效,之后會刪除。
驗證手機號,有手機號:
通過手機號查詢真實信息,有則返回真實信息主鍵ID,沒有添加有手機號的真實信息數據,返回主鍵ID;
從COOKIE中獲取OPEN_ID,得到空串或OPEN_ID:
真實信息主鍵ID查詢用戶數據:
沒有找到用戶數據:
如果OPEN_ID是空串,初始化一條用戶數據;關聯手機號,返回驗簽;——COOKIE中沒有OPEN_ID的游客注冊
OPEN_ID不是空串,用該OPEN_ID去數據庫找到該用戶數據;關聯手機號,返回驗簽;——游客注冊
找到用戶數據,刪除所有該OPEN_ID下,真實信息為NULL的用戶數據;如果用戶數據OPNE_ID為空,賦值OPEN_ID,保存用戶數據,返回驗簽。——老用戶登錄