浅谈多个社交帐号的登陆注册设计

本篇文章,主要讲述了用户登陆注册的逻辑及如何用社交帐号登陆。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

相关文章
相关标签/搜索