使用手机号为唯一身份进行登录

This commit is contained in:
pikachu1995@126.com 2023-04-25 17:59:42 +08:00
parent 959e24f51b
commit 279b473793
7 changed files with 47 additions and 45 deletions

View File

@ -40,17 +40,13 @@ public class MemberExecute implements MemberLoginEvent, MemberConnectLoginEvent
@Override
public void memberConnectLogin(Member member, ConnectAuthUser authUser) {
log.info("unionid:"+authUser.getToken().getUnionId());
log.info("openid:"+authUser.getUuid());
//保存UnionID
if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) {
connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getSource());
connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getSource().name());
}
//保存OpenID
if (StrUtil.isNotBlank(authUser.getUuid())) {
log.info("authUser.getSource():"+authUser.getSource());
log.info("authUser.getType():"+authUser.getType());
SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getSource()), ClientTypeEnum.valueOf(authUser.getType()));
SourceEnum sourceEnum = SourceEnum.getSourceEnum(authUser.getSource(), authUser.getType());
connectService.loginBindUser(member.getId(), authUser.getUuid(), sourceEnum.name());
}

View File

@ -1,7 +1,9 @@
package cn.lili.modules.connect.entity.dto;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.modules.connect.config.ConnectAuthEnum;
import cn.lili.modules.connect.entity.enums.AuthUserGender;
import cn.lili.modules.connect.entity.enums.ConnectEnum;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -65,14 +67,15 @@ public class ConnectAuthUser implements Serializable {
private AuthUserGender gender;
/**
* 用户来源
* 例如QQ微信微博等
*/
private String source;
private ConnectEnum source;
/**
* 类型
* 类型-客户端类型
* 例如PCWAP小程序
*/
private String type;
private ClientTypeEnum type;
/**
* 用户授权的token信息
*/

View File

@ -69,8 +69,8 @@ public class BaseAuthQQRequest extends BaseAuthRequest {
.uuid(openId)
.gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken)
.source(ConnectEnum.QQ.name())
.type(ClientTypeEnum.PC.name())
.source(ConnectEnum.QQ)
.type(ClientTypeEnum.PC)
.build();
}

View File

@ -62,8 +62,8 @@ public class BaseAuthWeChatPCRequest extends BaseAuthRequest {
.uuid(authToken.getOpenId())
.gender(AuthUserGender.getWechatRealGender(object.getString("sex")))
.token(authToken)
.source(ConnectEnum.WECHAT.name())
.type(ClientTypeEnum.PC.name())
.source(ConnectEnum.WECHAT)
.type(ClientTypeEnum.PC)
.build();
}

View File

@ -64,8 +64,8 @@ public class BaseAuthWeChatRequest extends BaseAuthRequest {
.uuid(openId)
.gender(AuthUserGender.getWechatRealGender(object.getString("sex")))
.token(authToken)
.source(ConnectEnum.WECHAT.name())
.type(ClientTypeEnum.H5.name())
.source(ConnectEnum.WECHAT)
.type(ClientTypeEnum.H5)
.build();
}

View File

@ -12,6 +12,7 @@ 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.common.utils.HttpUtils;
import cn.lili.common.utils.IpUtils;
@ -72,7 +73,7 @@ public class BaseAuthWeiboRequest extends BaseAuthRequest {
.remark(object.getString("description"))
.gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken)
.source(source.toString())
.source(ConnectEnum.WEIBO)
.build();
}

View File

@ -191,15 +191,11 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
String phone = (String) userInfo.get("purePhoneNumber");
connectAuthUser.setUsername("m" + phone);
connectAuthUser.setPhone(phone);
connectAuthUser.setSource(ClientTypeEnum.WECHAT_MP.name());
connectAuthUser.setType(ConnectEnum.WECHAT.name());
} else {
connectAuthUser.setUsername(UuidUtils.getUUID());
connectAuthUser.setSource(ClientTypeEnum.WECHAT_MP.name());
connectAuthUser.setType(ConnectEnum.WECHAT.name());
}
connectAuthUser.setSource(ConnectEnum.WECHAT);
connectAuthUser.setType(ClientTypeEnum.WECHAT_MP);
AuthToken authToken = new AuthToken();
authToken.setUnionId(unionId);
@ -270,33 +266,39 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
*/
private Token unionLoginCallback(ConnectAuthUser authUser, boolean longTerm) {
try {
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.getUuid())
.eq(Connect::getUnionType, sourceEnum.name());
Member member =null;
//判断是否传递手机号如果传递手机号则使用手机号登录
if(StrUtil.isNotBlank(authUser.getPhone())){
member = memberService.findByMobile(authUser.getPhone());
}
//如果未查到手机号的会员则使用第三方登录
if(member==null){
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(authUser.getSource(), authUser.getType());
queryWrapper.eq(Connect::getUnionId, authUser.getUuid())
.eq(Connect::getUnionType, sourceEnum.name());
}
//查询绑定关系
Connect connect = this.getOne(queryWrapper);
Member member = new Member();
if (connect == null) {
member = memberService.autoRegister(authUser);
} else {
//查询会员
member = memberService.getById(connect.getUserId());
//如果未绑定会员则把刚才查询到的联合登录表数据删除
if (member == null) {
this.remove(queryWrapper);
//查询绑定关系
Connect connect = this.getOne(queryWrapper);
if (connect == null) {
member = memberService.autoRegister(authUser);
} else {
//查询会员
member = memberService.getById(connect.getUserId());
//如果未绑定会员则把刚才查询到的联合登录表数据删除
if (member == null) {
this.remove(queryWrapper);
member = memberService.autoRegister(authUser);
}
}
}