APP第三方信任登录通过unionid进行登录
This commit is contained in:
parent
6f746e3aff
commit
f506fa86cc
@ -75,25 +75,14 @@ public class ConnectBuyerWebController {
|
||||
return connectUtil.getResult(state);
|
||||
}
|
||||
|
||||
// @GetMapping("/register/auto")
|
||||
// @ApiOperation(value = "WEB信任登录授权")
|
||||
// public ResultMessage<Token> webAuthorize() {
|
||||
// Token token = memberService.autoRegister();
|
||||
// return ResultUtil.data(token);
|
||||
// }
|
||||
|
||||
@ApiOperation(value = "unionID登录")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "openId", value = "openid", required = true, paramType = "query"),
|
||||
@ApiImplicitParam(name = "type", value = "联合类型", required = true,
|
||||
allowableValues = "WECHAT,QQ,ALIPAY,WEIBO,APPLE", paramType = "query"),
|
||||
@ApiImplicitParam(name = "uniAccessToken", value = "联合登陆返回的accessToken", required = true, paramType = "query")
|
||||
})
|
||||
@ApiOperation(value = "APP-unionID登录")
|
||||
@GetMapping("/app/login")
|
||||
public ResultMessage<Token> unionLogin(ConnectAuthUser authUser, @RequestHeader("uuid") String uuid) {
|
||||
try {
|
||||
System.out.println(1);
|
||||
return ResultUtil.data(connectService.unionLoginCallback(authUser, uuid));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("unionID登录错误", e);
|
||||
}
|
||||
return null;
|
||||
|
@ -1,9 +1,12 @@
|
||||
package cn.lili.event.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.event.MemberConnectLoginEvent;
|
||||
import cn.lili.event.MemberLoginEvent;
|
||||
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
|
||||
import cn.lili.modules.connect.entity.enums.ConnectEnum;
|
||||
import cn.lili.modules.connect.entity.enums.SourceEnum;
|
||||
import cn.lili.modules.connect.service.ConnectService;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
@ -38,11 +41,12 @@ public class MemberExecute implements MemberLoginEvent, MemberConnectLoginEvent
|
||||
|
||||
//保存UnionID
|
||||
if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) {
|
||||
connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getType());
|
||||
connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getSource());
|
||||
}
|
||||
//保存OpenID
|
||||
if (StrUtil.isNotBlank(authUser.getUuid())) {
|
||||
connectService.loginBindUser(member.getId(), authUser.getUuid(), authUser.getType());
|
||||
SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getSource()), ClientTypeEnum.valueOf(authUser.getType()));
|
||||
connectService.loginBindUser(member.getId(), authUser.getUuid(), sourceEnum.name());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public enum ClientTypeEnum {
|
||||
*/
|
||||
UNKNOWN("未知");
|
||||
|
||||
private final String clientName;
|
||||
private String clientName;
|
||||
|
||||
ClientTypeEnum(String des) {
|
||||
this.clientName = des;
|
||||
|
@ -67,11 +67,7 @@ public class ConnectAuthUser implements Serializable {
|
||||
* 用户来源
|
||||
*/
|
||||
private String source;
|
||||
/**
|
||||
* 用户来源
|
||||
* 例如:微信、支付宝、微博
|
||||
*/
|
||||
private String source1;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
* 例如:PC、WAP、小程序
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.lili.modules.connect.entity.enums;
|
||||
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
|
||||
/**
|
||||
* 联合登陆-渠道枚举
|
||||
*
|
||||
@ -13,6 +15,12 @@ public enum SourceEnum {
|
||||
WECHAT_OFFIACCOUNT_OPEN_ID("微信公众号 openid登录"),
|
||||
WECHAT_MP_OPEN_ID("微信小程序 openid登录"),
|
||||
WECHAT_APP_OPEN_ID("微信APP openid登录"),
|
||||
|
||||
QQ_APP_OPEN_ID("QQ APP openid登录"),
|
||||
QQ_PC_OPEN_ID("QQ PC应用 openid登录"),
|
||||
QQ_H5_OPEN_ID("QQ H5应用 openid登录"),
|
||||
|
||||
APPLE_OPEN_ID("苹果 openid登录"),
|
||||
;
|
||||
|
||||
|
||||
@ -21,4 +29,34 @@ public enum SourceEnum {
|
||||
SourceEnum(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public static SourceEnum getSourceEnum(ConnectEnum source, ClientTypeEnum type) {
|
||||
switch (source) {
|
||||
case WECHAT:
|
||||
switch (type) {
|
||||
case APP:
|
||||
return WECHAT_APP_OPEN_ID;
|
||||
case WECHAT_MP:
|
||||
return WECHAT_MP_OPEN_ID;
|
||||
case PC:
|
||||
return WECHAT_PC_OPEN_ID;
|
||||
case H5:
|
||||
return WECHAT_OFFIACCOUNT_OPEN_ID;
|
||||
}
|
||||
break;
|
||||
case QQ:
|
||||
switch (type) {
|
||||
case APP:
|
||||
return QQ_APP_OPEN_ID;
|
||||
case PC:
|
||||
return QQ_PC_OPEN_ID;
|
||||
case H5:
|
||||
return QQ_H5_OPEN_ID;
|
||||
}
|
||||
break;
|
||||
case APPLE:
|
||||
return APPLE_OPEN_ID;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package cn.lili.modules.connect.request;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import cn.lili.common.utils.StringUtils;
|
||||
import cn.lili.common.utils.UrlBuilder;
|
||||
import cn.lili.modules.connect.config.AuthConfig;
|
||||
@ -12,9 +14,9 @@ import cn.lili.modules.connect.entity.dto.AuthToken;
|
||||
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
|
||||
import cn.lili.modules.connect.entity.enums.AuthResponseStatus;
|
||||
import cn.lili.modules.connect.entity.enums.AuthUserGender;
|
||||
import cn.lili.modules.connect.entity.enums.ConnectEnum;
|
||||
import cn.lili.modules.connect.exception.AuthException;
|
||||
import cn.lili.modules.connect.util.GlobalAuthUtils;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import java.util.Map;
|
||||
@ -67,7 +69,8 @@ public class BaseAuthQQRequest extends BaseAuthRequest {
|
||||
.uuid(openId)
|
||||
.gender(AuthUserGender.getRealGender(object.getString("gender")))
|
||||
.token(authToken)
|
||||
.source(source.toString())
|
||||
.source(ConnectEnum.QQ.name())
|
||||
.type(ClientTypeEnum.PC.name())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cn.lili.modules.connect.request;
|
||||
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import cn.lili.common.utils.UrlBuilder;
|
||||
import cn.lili.modules.connect.config.AuthConfig;
|
||||
import cn.lili.modules.connect.config.ConnectAuthEnum;
|
||||
@ -13,7 +15,6 @@ import cn.lili.modules.connect.entity.enums.AuthUserGender;
|
||||
import cn.lili.modules.connect.entity.enums.ConnectEnum;
|
||||
import cn.lili.modules.connect.entity.enums.SourceEnum;
|
||||
import cn.lili.modules.connect.exception.AuthException;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
@ -61,8 +62,8 @@ public class BaseAuthWeChatPCRequest extends BaseAuthRequest {
|
||||
.uuid(authToken.getOpenId())
|
||||
.gender(AuthUserGender.getWechatRealGender(object.getString("sex")))
|
||||
.token(authToken)
|
||||
.source(source.toString())
|
||||
.source1(ConnectEnum.WECHAT.name())
|
||||
.source(ConnectEnum.WECHAT.name())
|
||||
.type(ClientTypeEnum.H5.name())
|
||||
.type(SourceEnum.WECHAT_PC_OPEN_ID.name())
|
||||
.build();
|
||||
}
|
||||
@ -116,6 +117,7 @@ public class BaseAuthWeChatPCRequest extends BaseAuthRequest {
|
||||
*/
|
||||
@Override
|
||||
public String authorize(String state) {
|
||||
|
||||
return UrlBuilder.fromBaseUrl(source.authorize())
|
||||
.queryParam("response_type", "code")
|
||||
.queryParam("appid", config.getClientId())
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cn.lili.modules.connect.request;
|
||||
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import cn.lili.common.utils.UrlBuilder;
|
||||
import cn.lili.modules.connect.config.AuthConfig;
|
||||
import cn.lili.modules.connect.config.ConnectAuthEnum;
|
||||
@ -14,7 +16,6 @@ import cn.lili.modules.connect.entity.enums.ConnectEnum;
|
||||
import cn.lili.modules.connect.entity.enums.SourceEnum;
|
||||
import cn.lili.modules.connect.exception.AuthException;
|
||||
import cn.lili.modules.connect.util.GlobalAuthUtils;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
@ -63,8 +64,8 @@ public class BaseAuthWeChatRequest extends BaseAuthRequest {
|
||||
.uuid(openId)
|
||||
.gender(AuthUserGender.getWechatRealGender(object.getString("sex")))
|
||||
.token(authToken)
|
||||
.source(source.toString())
|
||||
.source1(ConnectEnum.WECHAT.name())
|
||||
.source(ConnectEnum.WECHAT.name())
|
||||
.type(ClientTypeEnum.H5.name())
|
||||
.type(SourceEnum.WECHAT_OFFIACCOUNT_OPEN_ID.name())
|
||||
.build();
|
||||
}
|
||||
|
@ -1,26 +1,25 @@
|
||||
package cn.lili.modules.connect.serviceimpl;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.lili.cache.Cache;
|
||||
import cn.lili.cache.CachePrefix;
|
||||
import cn.lili.common.context.ThreadContextHolder;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.event.TransactionCommitSendMQEvent;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.properties.RocketmqCustomProperties;
|
||||
import cn.lili.common.security.AuthUser;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.security.token.Token;
|
||||
import cn.lili.common.utils.CookieUtil;
|
||||
import cn.lili.common.utils.HttpUtils;
|
||||
import cn.lili.modules.connect.entity.Connect;
|
||||
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
|
||||
import cn.lili.modules.connect.entity.dto.MemberConnectLoginMessage;
|
||||
import cn.lili.modules.connect.entity.dto.WechatMPLoginParams;
|
||||
import cn.lili.modules.connect.entity.enums.ConnectEnum;
|
||||
import cn.lili.modules.connect.entity.enums.SourceEnum;
|
||||
import cn.lili.modules.connect.mapper.ConnectMapper;
|
||||
import cn.lili.modules.connect.service.ConnectService;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
@ -33,7 +32,6 @@ import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem;
|
||||
import cn.lili.modules.system.entity.enums.SettingEnum;
|
||||
import cn.lili.modules.system.service.SettingService;
|
||||
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
|
||||
import cn.lili.rocketmq.tags.GoodsTagsEnum;
|
||||
import cn.lili.rocketmq.tags.MemberTagsEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@ -41,7 +39,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -53,7 +50,6 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.security.AlgorithmParameters;
|
||||
import java.security.Security;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 联合登陆接口实现
|
||||
@ -88,7 +84,6 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Token unionLoginCallback(ConnectAuthUser authUser, String uuid) {
|
||||
|
||||
return this.unionLoginCallback(authUser, false);
|
||||
}
|
||||
|
||||
@ -249,11 +244,20 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
*/
|
||||
private Token unionLoginCallback(ConnectAuthUser authUser, boolean longTerm) {
|
||||
|
||||
//使用UnionId登录
|
||||
|
||||
try {
|
||||
LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<Connect>()
|
||||
.eq(Connect::getUnionId, authUser.getToken().getUnionId())
|
||||
.eq(Connect::getUnionType, authUser.getSource1());
|
||||
LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<Connect>();
|
||||
//使用UnionId登录
|
||||
if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) {
|
||||
queryWrapper.eq(Connect::getUnionId, authUser.getToken().getUnionId())
|
||||
.eq(Connect::getUnionType, authUser.getSource());
|
||||
} else {
|
||||
//使用OpenID登录
|
||||
SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getType()), ClientTypeEnum.valueOf(authUser.getSource()));
|
||||
queryWrapper.eq(Connect::getUnionId, authUser.getToken().getUnionId())
|
||||
.eq(Connect::getUnionType, sourceEnum.name());
|
||||
}
|
||||
|
||||
//查询绑定关系
|
||||
Connect connect = this.getOne(queryWrapper);
|
||||
Member member = new Member();
|
||||
@ -353,4 +357,6 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
}
|
||||
throw new ServiceException(ResultCode.USER_CONNECT_ERROR);
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user