lipenghui 6 месяцев назад
Родитель
Сommit
1791b877af

+ 19 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java

@@ -24,6 +24,8 @@ import cn.iocoder.yudao.module.system.service.member.MemberService;
 import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
 import cn.iocoder.yudao.module.system.service.social.SocialUserService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import cn.iocoder.yudao.module.system.util.DingtalkUtil;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
 import com.google.common.annotations.VisibleForTesting;
 import com.xingyuv.captcha.model.common.ResponseModel;
 import com.xingyuv.captcha.model.vo.CaptchaVO;
@@ -168,20 +170,25 @@ public class AdminAuthServiceImpl implements AdminAuthService {
     @Override
     public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) {
         // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
-        SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(UserTypeEnum.ADMIN.getValue(), reqVO.getType(),
-                reqVO.getCode(), reqVO.getState());
-        if (socialUser == null || socialUser.getUserId() == null) {
-            throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
-        }
+//        SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(UserTypeEnum.ADMIN.getValue(), reqVO.getType(),
+//                reqVO.getCode(), reqVO.getState());
+//        if (socialUser == null || socialUser.getUserId() == null) {
+//            throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
+//        }
+        try {
+            String userIdByAuthCode = DingtalkUtil.getUserIdByAuthCode(reqVO.getCode());
+            OapiV2UserGetResponse.UserGetResponse userDetail = DingtalkUtil.getUserDetail(userIdByAuthCode);
+            // 获得用户
+            AdminUserDO user = userService.getUserByUsername(userDetail.getJobNumber());
+            if (user == null) {
+                throw exception(USER_NOT_EXISTS);
+            }
 
-        // 获得用户
-        AdminUserDO user = userService.getUserByUsername(socialUser.getNickname());
-        if (user == null) {
-            throw exception(USER_NOT_EXISTS);
+            // 创建 Token 令牌,记录登录日志
+            return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
-
-        // 创建 Token 令牌,记录登录日志
-        return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL);
     }
 
     @VisibleForTesting

+ 1 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java

@@ -6,7 +6,6 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
-import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO;
 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
@@ -50,8 +49,6 @@ public class SocialUserServiceImpl implements SocialUserService {
 
     @Resource
     private SocialClientService socialClientService;
-    @Resource
-    private DingtalkUtil dingtalkUtil;
 
     @Override
     public List<SocialUserDO> getSocialUserList(Long userId, Integer userType) {
@@ -121,7 +118,7 @@ public class SocialUserServiceImpl implements SocialUserService {
         JSONObject jsonObject = JSON.parseObject(socialUser.getRawUserInfo());
         String dingId = String.valueOf(jsonObject.get("dingId"));
         try {
-            OapiV2UserGetResponse.UserGetResponse userDetail = dingtalkUtil.getUserDetail(dingId);
+            OapiV2UserGetResponse.UserGetResponse userDetail = DingtalkUtil.getUserDetail(dingId);
 
             // 获得绑定用户
             SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserTypeAndSocialUserId(userType,

+ 9 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/DingtalkUtil.java

@@ -8,18 +8,15 @@ import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
 import com.dingtalk.api.response.OapiGettokenResponse;
 import com.dingtalk.api.response.OapiV2UserGetResponse;
 import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
-import com.taobao.api.ApiException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
 
 /**
  * @author suiyy
  * @date 20230602
  * @desc 钉钉API接口工具类
  */
-@Service
 public class DingtalkUtil {
     private static final Logger logger = LoggerFactory.getLogger(DingtalkUtil.class);
 
@@ -56,13 +53,13 @@ public class DingtalkUtil {
     /**
      * 获取钉钉 accessToken
      * @return
-     * @throws ApiException
+     * @throws Exception
      */
-    public String getAccessToken() throws ApiException {
-        DefaultDingTalkClient client = new DefaultDingTalkClient(GET_ACCESS_TOKEN_URL);
+    public static String getAccessToken() throws Exception {
+        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
         OapiGettokenRequest request = new OapiGettokenRequest();
-        request.setAppkey(APP_KEY);
-        request.setAppsecret(APP_SECRET);
+        request.setAppkey("dingik345qmyhtysvs2x");
+        request.setAppsecret("MIF55t94hRhI2EPaymoUF8-LRhWO6RxTxevYdwE9imdRUEZzxdgpNexqoTn2AIMr");
         request.setHttpMethod("GET");
         OapiGettokenResponse response = client.execute(request);
         return response.getAccessToken();
@@ -74,11 +71,11 @@ public class DingtalkUtil {
      * @param authCode 免登授权码
      * @return
      */
-    public String getUserIdByAuthCode(String authCode) throws Exception {
+    public static String getUserIdByAuthCode(String authCode) throws Exception {
         // 1. 获取access_token
         String accessToken = getAccessToken();
         // 2. 获取用户信息
-        DingTalkClient client = new DefaultDingTalkClient(URL_GET_USERINFO_BYAUTHCODE);
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
         OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
         req.setCode(authCode);
         OapiV2UserGetuserinfoResponse rsp = client.execute(req, accessToken);
@@ -95,11 +92,11 @@ public class DingtalkUtil {
      * @param userId 用户id
      * @return
      */
-    public OapiV2UserGetResponse.UserGetResponse getUserDetail(String userId) throws Exception {
+    public static OapiV2UserGetResponse.UserGetResponse getUserDetail(String userId) throws Exception {
         // 1. 获取access_token
         String accessToken = getAccessToken();
         // 2. 获取用户详情
-        DingTalkClient client = new DefaultDingTalkClient(URL_GET_USERINFO_BYUSERID);
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
         OapiV2UserGetRequest req = new OapiV2UserGetRequest();
         req.setUserid(userId);
         req.setLanguage("zh_CN");