From ea5d657e3177df33c306734e7516703fb60af101 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期六, 11 五月 2024 19:52:33 +0800
Subject: [PATCH] fix 修复 三方账号可以被同一个用户多次绑定问题
---
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 13 ++++++++++---
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java | 10 ++++++++--
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java | 6 ++----
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java | 6 +++---
4 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
index b2c9d3a..243d685 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -5,6 +5,7 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.lock.annotation.Lock4j;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthUser;
@@ -64,20 +65,24 @@
* 缁戝畾绗笁鏂圭敤鎴�
*
* @param authUserData 鎺堟潈鍝嶅簲瀹炰綋
- * @return 缁熶竴鍝嶅簲瀹炰綋
*/
+ @Lock4j
public void socialRegister(AuthUser authUserData) {
String authId = authUserData.getSource() + authUserData.getUuid();
// 绗笁鏂圭敤鎴蜂俊鎭�
SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class);
BeanUtil.copyProperties(authUserData.getToken(), bo);
- bo.setUserId(LoginHelper.getUserId());
+ Long userId = LoginHelper.getUserId();
+ bo.setUserId(userId);
bo.setAuthId(authId);
bo.setOpenId(authUserData.getUuid());
bo.setUserName(authUserData.getUsername());
bo.setNickName(authUserData.getNickname());
// 鏌ヨ鏄惁宸茬粡缁戝畾鐢ㄦ埛
- List<SysSocialVo> list = sysSocialService.selectByAuthId(authId);
+ SysSocialBo params = new SysSocialBo();
+ params.setUserId(userId);
+ params.setSource(bo.getSource());
+ List<SysSocialVo> list = sysSocialService.queryList(params);
if (CollUtil.isEmpty(list)) {
// 娌℃湁缁戝畾鐢ㄦ埛, 鏂板鐢ㄦ埛淇℃伅
sysSocialService.insertByBo(bo);
@@ -85,6 +90,8 @@
// 鏇存柊鐢ㄦ埛淇℃伅
bo.setId(list.get(0).getId());
sysSocialService.updateByBo(bo);
+ // 濡傛灉瑕佺粦瀹氱殑骞冲彴璐﹀彿宸茬粡琚粦瀹氳繃浜� 鏄惁鎶涘紓甯歌嚜琛屽喅鏂�
+ // throw new ServiceException("姝ゅ钩鍙拌处鍙峰凡缁忚缁戝畾!");
}
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java
index 7784271..cede1e9 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java
@@ -29,9 +29,9 @@
private Long id;
/**
- * 鐨勫敮涓�ID
+ * 璁よ瘉鍞竴ID
*/
- @NotBlank(message = "鐨勫敮涓�ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ @NotBlank(message = "璁よ瘉鍞竴ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
private String authId;
/**
@@ -64,7 +64,7 @@
/**
* 鐢ㄦ埛鐨� ID
*/
- @NotBlank(message = "鐢ㄦ埛鐨� ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ @NotBlank(message = "鐢ㄦ埛鐨処D涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java
index d5702c9..cc7016e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java
@@ -21,7 +21,7 @@
/**
* 鏌ヨ绀句細鍖栧叧绯诲垪琛�
*/
- List<SysSocialVo> queryList();
+ List<SysSocialVo> queryList(SysSocialBo bo);
/**
* 鏌ヨ绀句細鍖栧叧绯诲垪琛�
@@ -45,9 +45,7 @@
/**
- * 鏍规嵁 authId 鏌ヨ SysSocial 琛ㄥ拰 SysUser 琛紝杩斿洖 SysSocialAuthResult 鏄犲皠鐨勫璞�
- * @param authId 璁よ瘉ID
- * @return SysSocial
+ * 鏍规嵁 authId 鏌ヨ
*/
List<SysSocialVo> selectByAuthId(String authId);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java
index aa86ae1..9c54cbc 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java
@@ -1,8 +1,10 @@
package org.dromara.system.service.impl;
+import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.domain.SysSocial;
import org.dromara.system.domain.bo.SysSocialBo;
import org.dromara.system.domain.vo.SysSocialVo;
@@ -37,8 +39,12 @@
* 鎺堟潈鍒楄〃
*/
@Override
- public List<SysSocialVo> queryList() {
- return baseMapper.selectVoList();
+ public List<SysSocialVo> queryList(SysSocialBo bo) {
+ LambdaQueryWrapper<SysSocial> lqw = new LambdaQueryWrapper<SysSocial>()
+ .eq(ObjectUtil.isNotNull(bo.getUserId()), SysSocial::getUserId, bo.getUserId())
+ .eq(StringUtils.isNotBlank(bo.getAuthId()), SysSocial::getAuthId, bo.getAuthId())
+ .eq(StringUtils.isNotBlank(bo.getSource()), SysSocial::getSource, bo.getSource());
+ return baseMapper.selectVoList(lqw);
}
@Override
--
Gitblit v1.9.3