From 005e7df1b8d7733b459c24104bc775c52e528454 Mon Sep 17 00:00:00 2001
From: thiszhc <2029364173@qq.com>
Date: 星期四, 15 六月 2023 19:30:17 +0800
Subject: [PATCH] 优化第三方授权登录

---
 ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java |   72 +++++++++++++++++------------------
 1 files changed, 35 insertions(+), 37 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 3628b05..84c554d 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
@@ -44,6 +44,7 @@
 import org.dromara.system.service.ISysPermissionService;
 import org.dromara.system.service.ISysTenantService;
 import org.dromara.system.service.ISysUserService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -181,27 +182,49 @@
             return R.fail("瀵逛笉璧凤紝鎺堟潈淇℃伅楠岃瘉涓嶉�氳繃锛岃閫�鍑洪噸璇曪紒");
         }
         AuthUser authUserData = authUser.getData();
-        // 鏌ヨ绀句氦鐢ㄦ埛淇℃伅锛屽垽鏂槸鍚﹀凡缁忕粦瀹氾紝濡傛灉宸茬粡缁戝畾鍒欑洿鎺ョ櫥褰曪紝鍚﹀垯楠岃瘉鏄惁鐧诲綍锛屾湭鐧诲綍鍒欏厛鐧诲綍鍐嶇粦瀹�
-        SocialUserVo user = socialUserService.selectSocialUserByAuthId(source + authUserData.getUuid());
+        String authId = source + authUserData.getUuid();
+
+        SocialUserVo user = socialUserService.selectSocialUserByAuthId(authId);
         if (ObjectUtil.isNotNull(user)) {
-            checkTenant(user.getTenantId());
-            SysUserVo dbUser = loadUserByUsername(user.getTenantId(), user.getUserName());
-            LoginHelper.loginByDevice(buildLoginUser(dbUser), DeviceType.SOCIAL);
-            recordLogininfor(dbUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
-            recordLoginInfo(user.getUserId());
+            //鎵ц鐧诲綍鍜岃褰曠櫥褰曚俊鎭搷浣�
+            return loginAndRecord(user.getTenantId(), user.getUserName(), authUserData);
         } else {
             // 鍒ゆ柇鏄惁宸茬櫥褰�
             if (LoginHelper.getUserId() == null) {
                 return R.fail("鎺堟潈澶辫触锛岃鍏堢櫥褰曞啀缁戝畾");
             }
             SocialUserBo socialUserBo = new SocialUserBo();
-            socialUserService.insertByBo(setAuthUserData(authUserData, socialUserBo));
+            socialUserBo.setUserId(LoginHelper.getUserId());
+            socialUserBo.setAuthId(authUserData.getSource() + authUserData.getUuid());
+            socialUserBo.setSource(authUserData.getSource());
+            socialUserBo.setUserName(authUserData.getUsername());
+            socialUserBo.setNickName(authUserData.getNickname());
+            socialUserBo.setAvatar(authUserData.getAvatar());
+            socialUserBo.setOpenId(authUserData.getUuid());
+            BeanUtils.copyProperties(authUserData, socialUserBo);
+            BeanUtils.copyProperties(authUserData.getToken(), socialUserBo);
+
+            socialUserService.insertByBo(socialUserBo);
             SysUserVo lodingData = loadUserByUsername(LoginHelper.getTenantId(), LoginHelper.getUsername());
-            checkTenant(lodingData.getTenantId());
-            LoginHelper.loginByDevice(buildLoginUser(lodingData), DeviceType.SOCIAL);
-            recordLogininfor(lodingData.getTenantId(), socialUserBo.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
-            recordLoginInfo(socialUserBo.getUserId());
+            //鎵ц鐧诲綍鍜岃褰曠櫥褰曚俊鎭搷浣�
+            return loginAndRecord(lodingData.getTenantId(), socialUserBo.getUserName(), authUserData);
         }
+    }
+
+    /**
+     * 鎵ц鐧诲綍鍜岃褰曠櫥褰曚俊鎭搷浣�
+     *
+     * @param tenantId  绉熸埛ID
+     * @param userName  鐢ㄦ埛鍚�
+     * @param authUser  鎺堟潈鐢ㄦ埛淇℃伅
+     * @return 缁熶竴鍝嶅簲瀹炰綋
+     */
+    private R<String> loginAndRecord(String tenantId, String userName, AuthUser authUser) {
+        checkTenant(tenantId);
+        SysUserVo dbUser = loadUserByUsername(tenantId, userName);
+        LoginHelper.loginByDevice(buildLoginUser(dbUser), DeviceType.SOCIAL);
+        recordLogininfor(dbUser.getTenantId(), userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
+        recordLoginInfo(dbUser.getUserId());
         return R.ok(StpUtil.getTokenValue());
     }
 
@@ -440,29 +463,4 @@
         }
     }
 
-
-    public SocialUserBo setAuthUserData(AuthUser authUserData, SocialUserBo socialUser) {
-        socialUser.setUserId(LoginHelper.getUserId());
-        socialUser.setAuthId(authUserData.getSource() + authUserData.getUuid());
-        socialUser.setSource(authUserData.getSource());
-        socialUser.setUserName(authUserData.getUsername());
-        socialUser.setNickName(authUserData.getNickname());
-        socialUser.setAvatar(authUserData.getAvatar());
-        socialUser.setEmail(authUserData.getEmail());
-        socialUser.setOpenId(authUserData.getUuid());
-        socialUser.setAccessToken(authUserData.getToken().getAccessToken());
-        socialUser.setExpireIn(authUserData.getToken().getExpireIn());
-        socialUser.setRefreshToken(authUserData.getToken().getRefreshToken());
-        socialUser.setAccessCode(authUserData.getToken().getAccessCode());
-        socialUser.setUnionId(authUserData.getToken().getUnionId());
-        socialUser.setScope(authUserData.getToken().getScope());
-        socialUser.setTokenType(authUserData.getToken().getTokenType());
-        socialUser.setIdToken(authUserData.getToken().getIdToken());
-        socialUser.setMacAlgorithm(authUserData.getToken().getMacAlgorithm());
-        socialUser.setMacKey(authUserData.getToken().getMacKey());
-        socialUser.setCode(authUserData.getToken().getCode());
-        socialUser.setOauthToken(authUserData.getToken().getOauthToken());
-        socialUser.setOauthTokenSecret(authUserData.getToken().getOauthTokenSecret());
-        return socialUser;
-    }
 }

--
Gitblit v1.9.3