mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
🐛 Fixing a bug. #5426 企业微信多个用户绑定之后无法登录,只能一个用户绑定账号进行登录
This commit is contained in:
1 parent
c293eddc35
commit
fffb836b0d
2 files changed
+50
-4
No files matched your search
+30
-3
@@ -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;
|
||||
}
|
||||
|
||||
+20
-1
@@ -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");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user