Bläddra i källkod

fix 修复 三方账号可以被同一个用户多次绑定问题

疯狂的狮子Li 2 år sedan
förälder
incheckning
c6144ede2e

+ 7 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java

@@ -20,6 +20,13 @@ public interface RemoteSocialService {
      */
      */
     List<RemoteSocialVo> selectByAuthId(String authId);
     List<RemoteSocialVo> selectByAuthId(String authId);
 
 
+    /**
+     * 查询列表
+     *
+     * @param bo 社会化关系业务对象
+     */
+    List<RemoteSocialVo> queryList(RemoteSocialBo bo);
+
     /**
     /**
      * 保存社会化关系
      * 保存社会化关系
      *
      *

+ 1 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSocialVo.java

@@ -32,7 +32,7 @@ public class RemoteSocialVo implements Serializable {
     private String tenantId;
     private String tenantId;
 
 
     /**
     /**
-     * 唯一ID
+     * 认证唯一ID
      */
      */
     private String authId;
     private String authId;
 
 

+ 10 - 2
ruoyi-auth/src/main/java/org/dromara/auth/service/SysLoginService.java

@@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.lock.annotation.Lock4j;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import me.zhyd.oauth.model.AuthUser;
 import me.zhyd.oauth.model.AuthUser;
@@ -73,18 +74,23 @@ public class SysLoginService {
      *
      *
      * @param authUserData 授权响应实体
      * @param authUserData 授权响应实体
      */
      */
+    @Lock4j
     public void socialRegister(AuthUser authUserData) {
     public void socialRegister(AuthUser authUserData) {
         String authId = authUserData.getSource() + authUserData.getUuid();
         String authId = authUserData.getSource() + authUserData.getUuid();
         // 第三方用户信息
         // 第三方用户信息
         RemoteSocialBo bo = BeanUtil.toBean(authUserData, RemoteSocialBo.class);
         RemoteSocialBo bo = BeanUtil.toBean(authUserData, RemoteSocialBo.class);
         BeanUtil.copyProperties(authUserData.getToken(), bo);
         BeanUtil.copyProperties(authUserData.getToken(), bo);
-        bo.setUserId(LoginHelper.getUserId());
+        Long userId = LoginHelper.getUserId();
+        bo.setUserId(userId);
         bo.setAuthId(authId);
         bo.setAuthId(authId);
         bo.setOpenId(authUserData.getUuid());
         bo.setOpenId(authUserData.getUuid());
         bo.setUserName(authUserData.getUsername());
         bo.setUserName(authUserData.getUsername());
         bo.setNickName(authUserData.getNickname());
         bo.setNickName(authUserData.getNickname());
         // 查询是否已经绑定用户
         // 查询是否已经绑定用户
-        List<RemoteSocialVo> list = remoteSocialService.selectByAuthId(authId);
+        RemoteSocialBo params = new RemoteSocialBo();
+        params.setUserId(userId);
+        params.setSource(bo.getSource());
+        List<RemoteSocialVo> list = remoteSocialService.queryList(params);
         if (CollUtil.isEmpty(list)) {
         if (CollUtil.isEmpty(list)) {
             // 没有绑定用户, 新增用户信息
             // 没有绑定用户, 新增用户信息
             remoteSocialService.insertByBo(bo);
             remoteSocialService.insertByBo(bo);
@@ -92,6 +98,8 @@ public class SysLoginService {
             // 更新用户信息
             // 更新用户信息
             bo.setId(list.get(0).getId());
             bo.setId(list.get(0).getId());
             remoteSocialService.updateByBo(bo);
             remoteSocialService.updateByBo(bo);
+            // 如果要绑定的平台账号已经被绑定过了 是否抛异常自行决断
+            // throw new ServiceException("此平台账号已经被绑定!");
         }
         }
     }
     }
 
 

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysSocialBo.java

@@ -29,7 +29,7 @@ public class SysSocialBo extends TenantEntity {
     private Long id;
     private Long id;
 
 
     /**
     /**
-     * 唯一ID
+     * 认证唯一ID
      */
      */
     @NotBlank(message = "的唯一ID不能为空", groups = { AddGroup.class, EditGroup.class })
     @NotBlank(message = "的唯一ID不能为空", groups = { AddGroup.class, EditGroup.class })
     private String authId;
     private String authId;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysSocialVo.java

@@ -37,7 +37,7 @@ public class SysSocialVo implements Serializable {
     private String tenantId;
     private String tenantId;
 
 
     /**
     /**
-     * 唯一ID
+     * 认证唯一ID
      */
      */
     private String authId;
     private String authId;
 
 

+ 7 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteSocialServiceImpl.java

@@ -8,7 +8,6 @@ import org.dromara.system.api.domain.bo.RemoteSocialBo;
 import org.dromara.system.api.domain.vo.RemoteSocialVo;
 import org.dromara.system.api.domain.vo.RemoteSocialVo;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.vo.SysSocialVo;
 import org.dromara.system.domain.vo.SysSocialVo;
-import org.dromara.system.mapper.SysSocialMapper;
 import org.dromara.system.service.ISysSocialService;
 import org.dromara.system.service.ISysSocialService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -25,7 +24,6 @@ import java.util.List;
 public class RemoteSocialServiceImpl implements RemoteSocialService {
 public class RemoteSocialServiceImpl implements RemoteSocialService {
 
 
     private final ISysSocialService sysSocialService;
     private final ISysSocialService sysSocialService;
-    private final SysSocialMapper sysSocialMapper;
 
 
     /**
     /**
      * 根据 authId 查询用户信息
      * 根据 authId 查询用户信息
@@ -36,6 +34,13 @@ public class RemoteSocialServiceImpl implements RemoteSocialService {
         return MapstructUtils.convert(list, RemoteSocialVo.class);
         return MapstructUtils.convert(list, RemoteSocialVo.class);
     }
     }
 
 
+    @Override
+    public List<RemoteSocialVo> queryList(RemoteSocialBo bo) {
+        SysSocialBo params = MapstructUtils.convert(bo, SysSocialBo.class);
+        List<SysSocialVo> list = sysSocialService.queryList(params);
+        return MapstructUtils.convert(list, RemoteSocialVo.class);
+    }
+
     /**
     /**
      * 保存社会化关系
      * 保存社会化关系
      */
      */

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java

@@ -21,7 +21,7 @@ public interface ISysSocialService {
     /**
     /**
      * 查询社会化关系列表
      * 查询社会化关系列表
      */
      */
-    List<SysSocialVo> queryList();
+    List<SysSocialVo> queryList(SysSocialBo bo);
 
 
     /**
     /**
      * 查询社会化关系列表
      * 查询社会化关系列表

+ 8 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java

@@ -1,8 +1,10 @@
 package org.dromara.system.service.impl;
 package org.dromara.system.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.utils.MapstructUtils;
 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.SysSocial;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.vo.SysSocialVo;
 import org.dromara.system.domain.vo.SysSocialVo;
@@ -37,8 +39,12 @@ public class SysSocialServiceImpl implements ISysSocialService {
      * 授权列表
      * 授权列表
      */
      */
     @Override
     @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
     @Override