🐛 Fixing a bug. #5426 企业微信多个用户绑定之后无法登录,只能一个用户绑定账号进行登录

This commit is contained in:
lbw committed 2024-01-15 16:40:34 +08:00
1 parent c293eddc35
commit fffb836b0d
2 files changed
+50 -4

No files matched your search

@@ -17,11 +17,17 @@
package com.pig4cloud.pigx.admin.handler;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails;
import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper;
import com.pig4cloud.pigx.admin.service.SysUserService;
import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -50,8 +56,29 @@ public class DingTalkLoginHandler extends AbstractLoginHandler {
*/
@Override
public String identify(String code) {
SysSocialDetails condition = new SysSocialDetails();
condition.setType(LoginTypeEnum.DINGTALK.getType());
SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition));
String getAccessTokenUrl = "https://api.dingtalk.com/v1.0/oauth2/userAccessToken";
String accessTokenResult = HttpUtil.post(getAccessTokenUrl,
JSONUtil.createObj()
.set("clientId", socialDetails.getAppId())
.set("clientSecret", socialDetails.getAppSecret())
.set("grantType", "authorization_code")
.set("code", code)
.toString());
log.debug("获取钉钉Token响应报文:{}", accessTokenResult);
String accessToken = JSONUtil.parseObj(accessTokenResult).getStr("accessToken");
String getUserIdUrl = "https://api.dingtalk.com/v1.0/contact/users/me";
String userResult = HttpRequest.get(getUserIdUrl)
.header("x-acs-dingtalk-access-token", accessToken)
.execute()
.body();
log.debug("获取钉钉UserId响应报文:{}", userResult);
// 企微唯一标识
return "LengLeng";
return JSONUtil.parseObj(userResult).getStr("openId");
}
/**
@@ -61,7 +88,7 @@ public class DingTalkLoginHandler extends AbstractLoginHandler {
*/
@Override
public UserInfo info(String openId) {
SysUser user = sysUserService.getOne(Wrappers.<SysUser>query().lambda().eq(SysUser::getWxCpUserid, openId));
SysUser user = sysUserService.getOne(Wrappers.<SysUser>query().lambda().eq(SysUser::getWxDingUserid, openId));
if (user == null) {
log.info("钉钉未绑定:{}", openId);
@@ -78,7 +105,7 @@ public class DingTalkLoginHandler extends AbstractLoginHandler {
*/
@Override
public Boolean bind(SysUser user, String identify) {
user.setWxCpUserid(identify);
user.setWxDingUserid(identify);
sysUserService.updateById(user);
return true;
}
@@ -17,11 +17,16 @@
package com.pig4cloud.pigx.admin.handler;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails;
import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper;
import com.pig4cloud.pigx.admin.service.SysUserService;
import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -50,7 +55,21 @@ public class WeChatCPLoginHandler extends AbstractLoginHandler {
*/
@Override
public String identify(String code) {
return "LengLeng";
SysSocialDetails condition = new SysSocialDetails();
condition.setType(LoginTypeEnum.WEIXIN_CP.getType());
SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition));
String getAccessTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
String accessTokenResult = HttpUtil
.get(String.format(getAccessTokenUrl, socialDetails.getAppId(), socialDetails.getAppSecret()));
log.debug("获取企业微信Token响应报文:{}", accessTokenResult);
String accessToken = JSONUtil.parseObj(accessTokenResult).getStr("access_token");
String getUserIdUrl = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s";
String userResult = HttpUtil.get(String.format(getUserIdUrl, accessToken, code));
log.debug("获取企业微信UserId响应报文:{}", userResult);
// 企微唯一标识
return JSONUtil.parseObj(userResult).getStr("userid");
}
/**