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