设计可拓展的账号系统【二】:支持微信、QQ、 微博第三方登录

上文介绍 如何设计一个可拓展的账号系统【一】,主要是关于主账号(邮箱、手机、用户名)。
接下来我们将介绍一下账号系统接入第三方登录的设计:

基本表

user 表还是作为基本的信息表存在:

field type comment
id int(11) unsigned 用户id(主键)
nickname varchar(20) 昵称
avatar varchar(255) 头像
fullname varchar(30) 姓名
introduction varchar(255) 个人简介
birthday int(11) 生日
... ... ...

这一次我们将增加新的表用于支持第三方登录

oauth_type 表

存储支持的第三方登录的类型,存储 wechat、qq 等标示

field type comment
id int(11) unsigned 主键
name varchar(20) 类型名
descriptioin varchar(255) 类型描述

基础版 oauth 表

field type comment
id int(11) unsigned id(主键)
user_id int(11) unsigned 用户id
unionid varchar(50) 用户在各第三方平台的唯一id
openid varchar(50) 用户在各第三方平台下各应用的id
oauth_type int(11) 第三方登录标示

刚开始接触第三方登录的人可能不是很清楚 unionidopenid 是什么,下面简单介绍一下:

  • unionid: 公司M在微信开发平台创建了应用A,B, 用户应用A, B授权登录后,会有一个统一的
    unionid,通过对这个unionid的判断,我们可以判断是否是同一个用户。
  • openid: 公司M在微信开发平台创建了应用A,B, 用户应用A, B授权登录后,在A,B应用上会有不同的openid。在公司N上的应用C,D 得到会是另外的2个 openid

通过以上的描述,一些同学大概知道 oauth_type, 基础版 oauth 存储的数据:

oauth_type 存储的数据

id name description
1 wechat wechat
2 qq qq
3 ...... ......

oauth 存储的数据

id unionid openid oauth_type
1 aaaaaa xxxxxx 1
2 aaaaaa yyyyyy 1
3 aaaaaa zzzzzz 1
4 bbbbbb mmmmm 1
5 bbbbbb nnnnnnnn 2
5 ...... ...... 2

事实上openid比较少用,基础版 oauth 还可以继续改造, 我们可以把 openid 移到另外一个表 oauth_platform,然后建立 unionidopenid 之间的联系

oauth_platform 表

field type comment
id int(11) unsigned id(主键)
oauth_id int(11) oauth 表的主键 id
openid varchar(50) ...
appid varchar(32) ...

分析以上表设计的好处

按登录类型建表

如果大家有看过第一篇 如何设计一个可拓展的账号系统【一】, 就知道 basic_auth 表。
如果是普通的账号登录,查询的顺序是 basic_auth -> user
如果是第三方登录,查询的顺序是 oauth -> user
显而易见,我们把第三方登录、账号登录区分开了,而不是塞在一个大表

不同类型的账号,一个用户id

basic_auth, oauth 虽然是不同的账号类型,但是可以通过 user 表 建立联系 ,oauthbasic_auth 上都会存储 user_id。可在产品设计上,达到 1个用户只有1个账号,降低多账号带来的差体验。

推荐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在我公司的项目中,同时开发了APP和微信服务号,需要做到APP和微信服务号的商城数据互通。什么个意思?首先说说,我...
    万户猴阅读 23,163评论 2 29
  • 标签(空格分隔): iOS 我的计划1.使用微信SDK实现微信第三方登录2.使用友盟实现第三方登录3.使用open...
    iOS_愛OS阅读 5,848评论 1 9
  • 微信第三方登录 一、注册微信开放平台开发账号 1. 微信开放平台网站:微信开放平台 2. 注册开发者账号,按步骤填...
    VENTI阅读 9,505评论 6 8
  • 注意:代码自己动手写,不要复制! GitHub 一、接入微信第三方登录准备工作。 移动应用微信登录是基于OAuth...
    大冲哥阅读 15,177评论 0 7
  • 时间带着鲜明的恶意,从我身上慢慢流走;我深知,这以后的将来,我们无法一起走过。 对于命途多舛的人生,以及渺茫的时间...
    李小姐的杂货铺阅读 414评论 0 1