|
@@ -38,6 +38,7 @@ import java.util.Objects;
|
|
|
import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
|
|
|
import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTerminal;
|
|
|
+import static cn.newfeifan.mall.module.member.enums.DictTypeConstants.*;
|
|
|
import static cn.newfeifan.mall.module.member.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
/**
|
|
@@ -64,8 +65,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
|
|
|
@Override
|
|
|
public AppAuthLoginRespVO login(AppAuthLoginReqVO reqVO) {
|
|
|
- // 使用手机 + 密码,进行登录。
|
|
|
- MemberUserDO user = login0(reqVO.getMobile(), reqVO.getPassword());
|
|
|
+ // 使用用户名 + 密码,进行登录。
|
|
|
+ MemberUserDO user = login0(reqVO.getUsername(), reqVO.getPassword());
|
|
|
|
|
|
// 如果 socialType 非空,说明需要绑定社交用户
|
|
|
String openid = null;
|
|
@@ -75,7 +76,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
}
|
|
|
|
|
|
// 创建 Token 令牌,记录登录日志
|
|
|
- return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, openid);
|
|
|
+ return createTokenAfterLoginSuccess(user, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE, openid);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -86,8 +87,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp));
|
|
|
|
|
|
// 获得获得注册用户
|
|
|
- MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, getTerminal(), reqVO.getLinkId());
|
|
|
- Assert.notNull(user, "获取用户失败,结果为空");
|
|
|
+ MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), reqVO.getUsername(), userIp, getTerminal());
|
|
|
+ Assert.notNull(user, "获取用户失败,查询不到此用户");
|
|
|
|
|
|
// 如果 socialType 非空,说明需要绑定社交用户
|
|
|
String openid = null;
|
|
@@ -125,10 +126,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
user = userService.getUserByMobile(phone);
|
|
|
if (user == null) {
|
|
|
//加入手机号
|
|
|
- user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
|
|
|
+ user = userService.createUser(phone, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId(),null);
|
|
|
}
|
|
|
} else {
|
|
|
- user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId());
|
|
|
+ user = userService.createUser(null, socialUser.getNickname(), socialUser.getAvatar(), getClientIP(), getTerminal(), reqVO.getLinkId(),null);
|
|
|
}
|
|
|
|
|
|
socialUserApi.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(),
|
|
@@ -150,8 +151,8 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
|
|
|
|
|
|
// 获得获得注册用户
|
|
|
- MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(),
|
|
|
- getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal(), null);
|
|
|
+ MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(),null,
|
|
|
+ getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal());
|
|
|
Assert.notNull(user, "获取用户失败,结果为空");
|
|
|
|
|
|
// 绑定社交用户
|
|
@@ -162,10 +163,10 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, openid);
|
|
|
}
|
|
|
|
|
|
- private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String mobile,
|
|
|
+ private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String username,
|
|
|
LoginLogTypeEnum logType, String openid) {
|
|
|
// 插入登陆日志
|
|
|
- createLoginLog(user.getId(), mobile, logType, LoginResultEnum.SUCCESS);
|
|
|
+ createLoginLog(user.getId(), username, logType, LoginResultEnum.SUCCESS);
|
|
|
// 创建 Token 令牌
|
|
|
OAuth2AccessTokenRespDTO accessTokenRespDTO = oauth2TokenApi.createAccessToken(new OAuth2AccessTokenCreateReqDTO()
|
|
|
.setUserId(user.getId()).setUserType(getUserType().getValue())
|
|
@@ -179,34 +180,34 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
return socialClientApi.getAuthorizeUrl(type, UserTypeEnum.MEMBER.getValue(), redirectUri);
|
|
|
}
|
|
|
|
|
|
- private MemberUserDO login0(String mobile, String password) {
|
|
|
+ private MemberUserDO login0(String username, String password) {
|
|
|
final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_MOBILE;
|
|
|
// 校验账号是否存在
|
|
|
- MemberUserDO user = userService.getUserByMobile(mobile);
|
|
|
+ MemberUserDO user = userService.getUserByUsername(username);
|
|
|
if (user == null) {
|
|
|
- createLoginLog(null, mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
|
|
|
+ createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
|
|
|
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
|
|
|
}
|
|
|
if (!userService.isPasswordMatch(password, user.getPassword())) {
|
|
|
- createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
|
|
|
+ createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
|
|
|
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
|
|
|
}
|
|
|
// 校验是否禁用
|
|
|
if (ObjectUtil.notEqual(user.getStatus(), CommonStatusEnum.ENABLE.getStatus())) {
|
|
|
- createLoginLog(user.getId(), mobile, logTypeEnum, LoginResultEnum.USER_DISABLED);
|
|
|
+ createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.USER_DISABLED);
|
|
|
throw exception(AUTH_LOGIN_USER_DISABLED);
|
|
|
}
|
|
|
return user;
|
|
|
}
|
|
|
|
|
|
- private void createLoginLog(Long userId, String mobile, LoginLogTypeEnum logType, LoginResultEnum loginResult) {
|
|
|
+ private void createLoginLog(Long userId, String username, LoginLogTypeEnum logType, LoginResultEnum loginResult) {
|
|
|
// 插入登录日志
|
|
|
LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
|
|
|
reqDTO.setLogType(logType.getType());
|
|
|
reqDTO.setTraceId(TracerUtils.getTraceId());
|
|
|
reqDTO.setUserId(userId);
|
|
|
reqDTO.setUserType(getUserType().getValue());
|
|
|
- reqDTO.setUsername(mobile);
|
|
|
+ reqDTO.setUsername(username);
|
|
|
reqDTO.setUserAgent(ServletUtils.getUserAgent());
|
|
|
reqDTO.setUserIp(getClientIP());
|
|
|
reqDTO.setResult(loginResult.getResult());
|
|
@@ -267,6 +268,45 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
return AuthConvert.INSTANCE.convert(accessTokenDO, null);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public AppAuthLoginRespVO smsRegister(AppAuthSmsRegisterReqVO reqVO) {
|
|
|
+ // 校验验证码
|
|
|
+ String userIp = getClientIP();
|
|
|
+ smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp));
|
|
|
+
|
|
|
+ //校验手机号注册是否达到上限
|
|
|
+ verifyMobileIsMaximize(reqVO.getMobile());
|
|
|
+
|
|
|
+ //校验用户名
|
|
|
+ verifyUsername(reqVO.getUsername());
|
|
|
+
|
|
|
+ //创建用户
|
|
|
+ MemberUserDO user = userService.createUser(reqVO.getMobile(), reqVO.getUsername(), null, getClientIP(), getTerminal(), reqVO.getLinkId(), reqVO.getUsername());
|
|
|
+ // 创建 Token 令牌,记录登录日志
|
|
|
+ return createTokenAfterLoginSuccess(user, reqVO.getMobile(), LoginLogTypeEnum.LOGIN_SMS, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验手机号是否达到上限
|
|
|
+ * @param mobile 手机号
|
|
|
+ */
|
|
|
+ private void verifyMobileIsMaximize(String mobile) {
|
|
|
+ //如果手机号已经到达注册的上限了那就返回报错
|
|
|
+ if (userService.getUserCountByMobile(mobile) >= MOBILE_REGISTER_MAX) {
|
|
|
+ throw exception(MOBILE_IS_MAXIMIZE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验用户名
|
|
|
+ * @param username 用户名
|
|
|
+ */
|
|
|
+ private void verifyUsername(String username){
|
|
|
+ if (userService.selectCountByUsername(username) > 0) {
|
|
|
+ throw exception(AUTH_USERNAME_EXISTS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void createLogoutLog(Long userId) {
|
|
|
LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO();
|
|
|
reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType());
|