|
@@ -14,11 +14,14 @@ import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
|
|
|
import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.mysql.social.SocialUserBindMapper;
|
|
|
import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
|
|
|
import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum;
|
|
|
import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants;
|
|
|
import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
|
|
|
+import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
|
|
|
import cn.iocoder.yudao.module.system.service.logger.LoginLogService;
|
|
|
import cn.iocoder.yudao.module.system.service.member.MemberService;
|
|
|
import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
|
|
@@ -69,7 +72,8 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|
|
private CaptchaService captchaService;
|
|
|
@Resource
|
|
|
private SmsCodeApi smsCodeApi;
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private SocialUserBindMapper socialUserBindMapper;
|
|
|
/**
|
|
|
* 验证码的开关,默认为 true
|
|
|
*/
|
|
@@ -170,20 +174,32 @@ 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 ) {
|
|
|
+ throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
|
|
|
+ }
|
|
|
try {
|
|
|
- String userIdByAuthCode = DingtalkUtil.getUserIdByAuthCode(reqVO.getCode());
|
|
|
- OapiV2UserGetResponse.UserGetResponse userDetail = DingtalkUtil.getUserDetail(userIdByAuthCode);
|
|
|
+ // 获得绑定用户
|
|
|
+ SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserTypeAndSocialUserId(UserTypeEnum.ADMIN.getValue(),
|
|
|
+ socialUser.getUserId());
|
|
|
+ AdminUserDO user;
|
|
|
+ if (Objects.isNull(socialUserBind)) {
|
|
|
+ String userId = DingtalkUtil.getUserIdByUnion(socialUser.getUnionId());
|
|
|
+ OapiV2UserGetResponse.UserGetResponse userDetail = DingtalkUtil.getUserDetail(userId);
|
|
|
+ user = userService.getUserByUsername(userDetail.getJobNumber());
|
|
|
+ // 绑定钉钉
|
|
|
+ SocialUserBindDO newSocialUserBind = SocialUserBindDO.builder()
|
|
|
+ .userId(user.getId()).userType(UserTypeEnum.ADMIN.getValue())
|
|
|
+ .socialUserId(socialUser.getUserId()).socialType(SocialTypeEnum.DINGTALK.getType()).build();
|
|
|
+ socialUserBindMapper.insert(newSocialUserBind);
|
|
|
+ } else {
|
|
|
+ user = userService.getUser(socialUserBind.getUserId());
|
|
|
+ }
|
|
|
// 获得用户
|
|
|
- AdminUserDO user = userService.getUserByUsername(userDetail.getJobNumber());
|
|
|
if (user == null) {
|
|
|
throw exception(USER_NOT_EXISTS);
|
|
|
}
|
|
|
-
|
|
|
// 创建 Token 令牌,记录登录日志
|
|
|
return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL);
|
|
|
} catch (Exception e) {
|