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

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 @Override
public void memberConnectLogin(Member member, ConnectAuthUser authUser) { public void memberConnectLogin(Member member, ConnectAuthUser authUser) {
log.info("unionid:"+authUser.getToken().getUnionId());
log.info("openid:"+authUser.getUuid());
//保存UnionID //保存UnionID
if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) { 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 //保存OpenID
if (StrUtil.isNotBlank(authUser.getUuid())) { if (StrUtil.isNotBlank(authUser.getUuid())) {
log.info("authUser.getSource():"+authUser.getSource()); SourceEnum sourceEnum = SourceEnum.getSourceEnum(authUser.getSource(), authUser.getType());
log.info("authUser.getType():"+authUser.getType());
SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getSource()), ClientTypeEnum.valueOf(authUser.getType()));
connectService.loginBindUser(member.getId(), authUser.getUuid(), sourceEnum.name()); connectService.loginBindUser(member.getId(), authUser.getUuid(), sourceEnum.name());
} }

View File

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

View File

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

View File

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

View File

@ -64,8 +64,8 @@ public class BaseAuthWeChatRequest extends BaseAuthRequest {
.uuid(openId) .uuid(openId)
.gender(AuthUserGender.getWechatRealGender(object.getString("sex"))) .gender(AuthUserGender.getWechatRealGender(object.getString("sex")))
.token(authToken) .token(authToken)
.source(ConnectEnum.WECHAT.name()) .source(ConnectEnum.WECHAT)
.type(ClientTypeEnum.H5.name()) .type(ClientTypeEnum.H5)
.build(); .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.dto.ConnectAuthUser;
import cn.lili.modules.connect.entity.enums.AuthResponseStatus; import cn.lili.modules.connect.entity.enums.AuthResponseStatus;
import cn.lili.modules.connect.entity.enums.AuthUserGender; 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.exception.AuthException;
import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.IpUtils; import cn.lili.common.utils.IpUtils;
@ -72,7 +73,7 @@ public class BaseAuthWeiboRequest extends BaseAuthRequest {
.remark(object.getString("description")) .remark(object.getString("description"))
.gender(AuthUserGender.getRealGender(object.getString("gender"))) .gender(AuthUserGender.getRealGender(object.getString("gender")))
.token(authToken) .token(authToken)
.source(source.toString()) .source(ConnectEnum.WEIBO)
.build(); .build();
} }

View File

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