Browse Source

!407 【轻量级 PR】优化第三方认证授权绑定
Merge pull request !407 from MichelleChung/5.X

疯狂的狮子Li 1 year ago
parent
commit
776b235cec

+ 14 - 2
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java

@@ -26,6 +26,7 @@ import org.dromara.common.tenant.exception.TenantException;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.bo.SysSocialBo;
+import org.dromara.system.domain.vo.SysSocialVo;
 import org.dromara.system.domain.vo.SysTenantVo;
 import org.dromara.system.domain.vo.SysUserVo;
 import org.dromara.system.mapper.SysUserMapper;
@@ -69,14 +70,25 @@ public class SysLoginService {
      * @return 统一响应实体
      */
     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());
-        bo.setAuthId(authUserData.getSource() + authUserData.getUuid());
+        bo.setAuthId(authId);
         bo.setOpenId(authUserData.getUuid());
         bo.setUserName(authUserData.getUsername());
         bo.setNickName(authUserData.getNickname());
-        sysSocialService.insertByBo(bo);
+        // 查询是否已经绑定用户
+        SysSocialVo vo = sysSocialService.selectByAuthId(authId);
+        if (ObjectUtil.isEmpty(vo)) {
+            // 没有绑定用户, 新增用户信息
+            sysSocialService.insertByBo(bo);
+        } else {
+            // 更新用户信息
+            bo.setId(vo.getId());
+            sysSocialService.updateByBo(bo);
+        }
     }
 
 

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

@@ -33,6 +33,10 @@ public interface ISysSocialService {
      */
     Boolean insertByBo(SysSocialBo bo);
 
+    /**
+     * 更新社会化关系
+     */
+    Boolean updateByBo(SysSocialBo bo);
 
     /**
      * 删除社会化关系信息

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java

@@ -65,6 +65,15 @@ public class SysSocialServiceImpl implements ISysSocialService {
         return flag;
     }
 
+    /**
+     * 更新社会化关系
+     */
+    @Override
+    public Boolean updateByBo(SysSocialBo bo) {
+        SysSocial update = MapstructUtils.convert(bo, SysSocial.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
 
     /**
      * 保存前的数据校验