用户表设计
# 用户表设计
用户表结构的设计,算是整个应用架构的基石。
需求分析:
- 多种登录方式:包括手机号、微信、QQ、微博等;
- 可进行绑定和解绑或者更换绑定:用户使用任意方式登录后可绑定和解绑或者更换绑定其他 登录授权;
- 支持 unionid(针对 QQ / 微信等):如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的 unionid 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的 unionid 是唯一的。
使用场景一
先使用手机号注册,之后绑定微信、微博、QQ 等第三方账号; 注册成功后 users 表: 用户昵称及头像可在注册时要求添加也可自动生成。 之后根据用户 id 绑定 / 解绑 / 更换绑定相应第三方账号 QQ、微博、微信等账号
使用场景二
先使用微信、微博、QQ 等第三方账号注册,之后再绑定手机及其他未绑定第三方账号; 以微信登录为例,第一次绑定成功后,users 和 oauths。 通过第三方授权获取的用户信息 (昵称、头像) 创建 users 数据:
根据用户 ID 及第三方授权获得的信息创建 oauths 数据
其中微信登录可分为 wechat 微信移动应用,official_account 微信公众账号,mini_program 微信小程序,同一主体的情况下 unionid 是一致的。
之后再根据用户 ID 绑定手机及其他未绑定第三方账号。
# 基本设计
(用户基本表+用户授权信息表)
用户基本表(user_bases):只存基准数据,不做登录相关的处理
用户授权信息表(user_oauths):存放授权信息(手机/邮箱/用户名)+(密码/access_token)
# 数据库表设计
user_bases:
- base_id:int 唯一id
- nickname:varchar 昵称
- avatar_url:varchar 头像
- full_name:varchar 姓名
- position:varchar 职位
- phone:varchar 电话
- email:varchar 邮箱
- birthday:date 生日
- default_address:varchar 默认地址
- last_signin:timestamp 上一次登录时间
- last_identity_type:varchar 上一次登录类型
- (扩展字段a)extend_field_a:varchar
- (扩展字段b)extend_field_b:varchar
user_oauths:
- oauth_id:int 唯一id
- identity_type:varchar 登录类型 (手机号/邮箱/用户名) 或第三方应用名称 (微信 , 微博等)
- identifier:varchar 标识 (手机号/邮箱/用户名或第三方应用的唯一标识)
- credential:varchar 授权凭证 (站内的保存密码 , 站外的不保存或保存 token)
- password:varchar 密码
- (扩展字段a)extend_field_a:varchar
- (扩展字段b)extend_field_b:varchar
user_addresses:
- (唯一id)address_id:int
- (收货人)receiver:varchar
- (手机号码)phone:varchar
- (所在地区)area:varchar
- (详细地址)full_address:varchar
- (标签)tag:varchar
- (扩展字段a)extend_field_a:varchar
- (扩展字段b)extend_field_b:varchar
系统具体表结构参考数据库表设计 (opens new window)
# 第三方授权登录
# 微信登录
编辑 (opens new window)