当前位置: 首页 > 文档资料 > JustAuth 中文文档 >

JustAuth 与现有用户系统整合

优质
小牛编辑
127浏览
2023-12-01

发现问题

之前在群里经常会看到小伙伴有以下几点疑问:

  • JustAuth 如何与现有用户系统整合?
  • JustAuth 如何实现用户绑定?

我就此需求,整理了一份 JustAuth 与现有用户系统整合逻辑图

JustAuth 与用户系统整合流程图

数据库表结构(参考)

以下为 第三方登录 + 本地用户系统 的数据库表结构(仅供参考)

用户表(user)

字段类型释义NULL备注
idint主键false
usernamevarchar用户名false
passwordvarchar密码true选择使用第三方用户登录时不存在密码,除非进行了用户绑定
nicknamevarchar昵称true
gendervarchar性别true
avatarvarchar头像true
blogvarchar个人地址true
companyvarchar公司名true
locationvarchar地址true
emailvarchar邮箱true

社会化用户表(social_user)

字段类型释义NULL备注
idint主键false
uuidvarchar第三方系统的唯一IDfalse详细解释请参考:名词解释
sourcevarchar第三方用户来源falseGITHUB、GITEE、QQ,更多请参考:AuthDefaultSource.java (opens new window)
access_tokenvarchar用户的授权令牌false
expire_inint第三方用户的授权令牌的有效期true部分平台可能没有
refresh_tokenvarchar刷新令牌true部分平台可能没有
open_idvarchar第三方用户的 open idtrue部分平台可能没有
uidvarchar第三方用户的 IDtrue部分平台可能没有
access_codevarchar个别平台的授权信息true部分平台可能没有
union_idvarchar第三方用户的 union idtrue部分平台可能没有
scopevarchar第三方用户授予的权限true部分平台可能没有
token_typevarchar个别平台的授权信息true部分平台可能没有
id_tokenvarcharid tokentrue部分平台可能没有
mac_algorithmvarchar小米平台用户的附带属性true部分平台可能没有
mac_keyvarchar小米平台用户的附带属性true部分平台可能没有
codevarchar用户的授权codetrue部分平台可能没有
oauth_tokenvarcharTwitter平台用户的附带属性true部分平台可能没有
oauth_token_secretvarcharTwitter平台用户的附带属性true部分平台可能没有

社会化用户 & 系统用户关系表(social_user_auth)

字段类型释义NULL备注
idint主键false
user_idvarchar系统用户IDfalse
social_user_idvarchar社会化用户IDfalse数据库主键(非第三方用户的ID)

注意

建议通过uuid + source的方式唯一确定一个用户,这样可以解决用户身份归属的问题。因为 单个用户ID 在某一平台中是唯一的,但不能保证在所有平台中都是唯一的。

相关 SQL 操作的伪代码

获取第三方平台 GITHUB 用户(UUID = xxxxxxx)的 SQL 语句伪代码:

SELECT
    su.* 
FROM
    `social_user` su 
WHERE
    su.uuid = 'xxxxxxx' 
    AND su.source = 'GITHUB'

查询系统用户(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'

解绑 GITHUB 平台的绑定账号

DELETE FROM `social_user_auth` sua WHERE sua.social_user_id = '1' AND sua.user_id = '1'