淺談多個社交帳號的登陸註冊設計

本篇文章,主要講述了用戶登陸註冊的邏輯及如何用社交帳號登陸。git

僅供參考,具體狀況依據產品需求而定。github

開放平臺有哪些?
  • 微信
  • Sina微博
  • QQ
  • 163
  • 360
  • 豆瓣
  • 淘寶
  • github
  • 開源中國
  • 其餘...
用戶註冊邏輯
  • 參數segmentfault

    • (username)用戶名
    • (password)密碼
    • (platform_id)平臺ID
    • (code)驗證碼
  • 驗證數據合法性。緩存

    判斷`user`表是否存在該用戶名。
    
    若存在,引導用戶登陸。
    
    若不存在,執行註冊的程序。
  • 密碼加密規則 (參考:加密技術與密鑰安全管理)
用戶登陸邏輯
  • 普通登陸:安全

    • 參數:微信

      • (username)用戶名
      • (password)密碼
      • (platform_id)平臺ID
      • (code)驗證碼
    • 驗證數據的合法性。

      判斷user表中是否存在用戶數據。ui

    • 記錄日誌。
  • 社交帳號登陸(參數):加密

    • 參數:spa

      • (platform_id)平臺ID
      • (channel_id)渠道ID
      • (open_id) 社交平臺開放ID
    • 驗證數據的合法性。日誌

      判斷`user_social`表中是否存在該openid的數據。
      
      若存在,直接進行登陸。
      
      若不存在,將數據,存儲到`user_social` 表,引導用戶綁定本站帳號。
      
      若本站已存在帳號,直接關聯帳號便可。

      若本站不存在帳號,引導用戶註冊,成功後與當前openid關聯便可。

    • 記錄日誌
數據表結構
  • 用戶帳號表

    CREATE TABLE `user` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
      `username` varchar(80) NOT NULL DEFAULT '' COMMENT '用戶名',
      `password` char(60) NOT NULL DEFAULT '' COMMENT '密碼',
      `platform_id` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '平臺ID(1=PC,2=Wap,3=Android,4=iOS)',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶帳號表';
  • 用戶社交帳號表

    CREATE TABLE `user_social` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
      `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用戶ID',
      `open_id` varchar(120) NOT NULL DEFAULT '' COMMENT '社交平臺開放ID',
      `platform_id` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '平臺ID(1=PC,2=Wap,3=Android,4=iOS)',
      `channel_id` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '渠道ID(1=QQ,2=SinaWeibo,3=Weixin)',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
      `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新時間',
      PRIMARY KEY (`id`),
      KEY `idx_uid` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶社交帳號表';
  • 用戶登陸日誌表

    CREATE TABLE `user_login_log` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
      `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用戶ID',
      `platform_id` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '平臺ID(1=PC,2=Wap,3=Android,4=iOS)',
      `channel_id` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '渠道ID(1=QQ,2=SinaWeibo,3=Weixin)',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間'
      PRIMARY KEY (`id`),
      KEY `idx_uid` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶登陸日誌表';

推薦閱讀

clipboard.png

相關文章
相關標籤/搜索