JustAuth与现有用户系统整合
# 发现问题
之前在群里经常会看到小伙伴有以下几点疑问:
- JustAuth如何与现有用户系统整合?
- JustAuth如何实现用户绑定?
我就此需求,整理了一份JustAuth与现有用户系统整合逻辑图
# JustAuth与用户系统整合流程图
在线版: JustAuth与现有用户系统整合 (opens new window)

# 数据库表结构(参考)
以下为 第三方登录 + 本地用户系统 的数据库表结构(仅供参考)
# 用户表(user)
| 字段 | 类型 | 释义 | NULL | 备注 |
|---|---|---|---|---|
| id | int | 主键 | false | |
| username | varchar | 用户名 | false | |
| password | varchar | 密码 | true | 选择使用第三方用户登录时不存在密码,除非进行了用户绑定 |
| nickname | varchar | 昵称 | true | |
| gender | varchar | 性别 | true | |
| avatar | varchar | 头像 | true | |
| blog | varchar | 个人地址 | true | |
| company | varchar | 公司名 | true | |
| location | varchar | 地址 | true | |
| varchar | 邮箱 | true |
# 社会化用户表(social_user)
| 字段 | 类型 | 释义 | NULL | 备注 |
|---|---|---|---|---|
| id | int | 主键 | false | |
| uuid | varchar | 第三方系统的唯一ID | false | 详细解释请参考:名词解释 |
| source | varchar | 第三方用户来源 | false | GITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java (opens new window) |
| access_token | varchar | 用户的授权令牌 | false | |
| expire_in | int | 第三方用户的授权令牌的有效期 | true | 部分平台可能没有 |
| refresh_token | varchar | 刷新令牌 | true | 部分平台可能没有 |
| open_id | varchar | 第三方用户的 open id | true | 部分平台可能没有 |
| uid | varchar | 第三方用户的 ID | true | 部分平台可能没有 |
| access_code | varchar | 个别平台的授权信息 | true | 部分平台可能没有 |
| union_id | varchar | 第三方用户的 union id | true | 部分平台可能没有 |
| scope | varchar | 第三方用户授予的权限 | true | 部分平台可能没有 |
| token_type | varchar | 个别平台的授权信息 | true | 部分平台可能没有 |
| id_token | varchar | id token | true | 部分平台可能没有 |
| mac_algorithm | varchar | 小米平台用户的附带属性 | true | 部分平台可能没有 |
| mac_key | varchar | 小米平台用户的附带属性 | true | 部分平台可能没有 |
| code | varchar | 用户的授权code | true | 部分平台可能没有 |
| oauth_token | varchar | Twitter平台用户的附带属性 | true | 部分平台可能没有 |
| oauth_token_secret | varchar | Twitter平台用户的附带属性 | true | 部分平台可能没有 |
# 社会化用户 & 系统用户关系表(social_user_auth)
| 字段 | 类型 | 释义 | NULL | 备注 |
|---|---|---|---|---|
| id | int | 主键 | false | |
| user_id | varchar | 系统用户ID | false | |
| social_user_id | varchar | 社会化用户ID | false | 数据库主键(非第三方用户的ID) |
注意
- 建议通过
uuid+source的方式唯一确定一个用户,这样可以解决用户身份归属的问题。因为 单个用户ID 在某一平台中是唯一的,但不能保证在所有平台中都是唯一的。 - 相关
SQL操作的伪代码- 获取第三方平台
GITHUB用户(UUID =xxxxxxx)的SQL语句伪代码:SELECT su.* FROM `social_user` su WHERE su.uuid = 'xxxxxxx' AND su.source = 'GITHUB'1
2
3
4
5
6
7 - 查询系统用户(ID =
1)是否绑定了GITHUB平台账号的SQL语句伪代码:SELECT count(1) FROM `social_user_auth` sua INNER JOIN `social_user` su ON sua.social_user_id = su.id WHERE sua.user_id = '1' AND su.source = 'GITHUB'1
2
3
4
5
6
7
8 - 解绑
GITHUB平台的绑定账号DELETE FROM `social_user_auth` sua WHERE sua.social_user_id = '1' AND sua.user_id = '1'1
- 获取第三方平台
编辑 (opens new window)
Last Updated: 2021/10/06, 18:03:43