|
@@ -22,11 +22,17 @@ import cn.newfeifan.mall.module.system.api.social.SocialUserApi;
|
|
|
import cn.newfeifan.mall.module.system.api.social.dto.SocialUserBindReqDTO;
|
|
|
import cn.newfeifan.mall.module.system.api.social.dto.SocialUserRespDTO;
|
|
|
import cn.newfeifan.mall.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO;
|
|
|
+import cn.newfeifan.mall.module.system.controller.admin.auth.vo.AuthLoginRespVO;
|
|
|
+import cn.newfeifan.mall.module.system.dal.dataobject.config.SystemConfigDO;
|
|
|
+import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
import cn.newfeifan.mall.module.system.enums.logger.LoginLogTypeEnum;
|
|
|
import cn.newfeifan.mall.module.system.enums.logger.LoginResultEnum;
|
|
|
import cn.newfeifan.mall.module.system.enums.oauth2.OAuth2ClientConstants;
|
|
|
import cn.newfeifan.mall.module.system.enums.sms.SmsSceneEnum;
|
|
|
import cn.newfeifan.mall.module.system.enums.social.SocialTypeEnum;
|
|
|
+import cn.newfeifan.mall.module.system.service.auth.AdminAuthService;
|
|
|
+import cn.newfeifan.mall.module.system.service.config.SystemConfigService;
|
|
|
+import cn.newfeifan.mall.module.system.service.user.AdminUserService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -38,6 +44,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
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.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
|
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.*;
|
|
@@ -63,6 +70,12 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
private SocialClientApi socialClientApi;
|
|
|
@Resource
|
|
|
private OAuth2TokenApi oauth2TokenApi;
|
|
|
+ @Resource
|
|
|
+ private AdminAuthService authService;
|
|
|
+ @Resource
|
|
|
+ private SystemConfigService configService;
|
|
|
+ @Resource
|
|
|
+ private AdminUserService adminUserService;
|
|
|
|
|
|
@Override
|
|
|
public AppAuthLoginRespVO login(AppAuthLoginReqVO reqVO) {
|
|
@@ -89,7 +102,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
|
|
|
// 获得获得注册用户
|
|
|
MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), reqVO.getUsername(), userIp, getTerminal());
|
|
|
- if(user == null){
|
|
|
+ if (user == null) {
|
|
|
throw exception(USER_MOBILE_NOT_EXISTS);
|
|
|
}
|
|
|
|
|
@@ -125,7 +138,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
verifyMobileIsMaximize(phone);
|
|
|
|
|
|
//微信能绑定的账号上限校验
|
|
|
- if(socialUserApi.wxBindIsMax(socialUser.getId())){
|
|
|
+ if (socialUserApi.wxBindIsMax(socialUser.getId())) {
|
|
|
throw exception(AUTH_SOCIAL_USER_BIND_MAX);
|
|
|
}
|
|
|
|
|
@@ -184,6 +197,29 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL, reqVO.getOpenId());
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String redirectLogin() {
|
|
|
+
|
|
|
+ MemberUserDO user = userService.getUser(getLoginUserId());
|
|
|
+ AdminUserDO systemUser = adminUserService.getUser(user.getSystemUsersId());
|
|
|
+ // 判断是否绑定系统用户
|
|
|
+ if (systemUser == null) {
|
|
|
+ throw exception(MEMBER_USER_NOT_BINDING_SYSTEM_USER);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 系统url配置
|
|
|
+ SystemConfigDO redisConfig = configService.getRedisConfig();
|
|
|
+ AuthLoginRespVO token = authService.createTokenAfterLoginSuccess(systemUser.getId(), systemUser.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME);
|
|
|
+
|
|
|
+ // 跳转地址
|
|
|
+ String url = redisConfig.getPlatformDomain();
|
|
|
+ if (!systemUser.getCategoryId().equals(1L)) {
|
|
|
+ url = redisConfig.getMerchantDomain();
|
|
|
+ }
|
|
|
+
|
|
|
+ return url + "/login" + "?accessToken=" + token.getAccessToken() + "&refreshToken=" + token.getRefreshToken();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public AppAuthLoginRespVO weixinMiniAppLogin(AppAuthWeixinMiniAppLoginReqVO reqVO) {
|
|
|
// 获得对应的手机号信息
|
|
@@ -274,14 +310,14 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
public void sendSmsCode(Long userId, AppAuthSmsSendReqVO reqVO) {
|
|
|
// 情况 1:如果是修改手机场景,需要校验新手机号是否已经注册,说明不能使用该手机了
|
|
|
if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene())) {
|
|
|
- MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(),userId);
|
|
|
+ MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(), userId);
|
|
|
if (user == null) {
|
|
|
throw exception(USER_MOBILE_IS_ERROR);
|
|
|
}
|
|
|
}
|
|
|
// 情况 2:如果是重置密码场景,需要校验手机号是存在的
|
|
|
if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_RESET_PASSWORD.getScene())) {
|
|
|
- MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(),userId);
|
|
|
+ MemberUserDO user = userService.getUserByMobile(reqVO.getMobile(), userId);
|
|
|
if (user == null) {
|
|
|
throw exception(USER_MOBILE_NOT_EXISTS);
|
|
|
}
|
|
@@ -293,7 +329,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
reqVO.setMobile(user.getMobile());
|
|
|
}
|
|
|
//情况 4:如果是修改手机号时,输入新的手机号,需要校验手机号是否绑定上限
|
|
|
- if(Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_NEW_MOBILE.getScene())){
|
|
|
+ if (Objects.equals(reqVO.getScene(), SmsSceneEnum.MEMBER_UPDATE_NEW_MOBILE.getScene())) {
|
|
|
verifyMobileIsMaximize(reqVO.getMobile());
|
|
|
}
|
|
|
|
|
@@ -333,6 +369,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
|
|
|
|
|
|
/**
|
|
|
* 校验手机号是否达到上限
|
|
|
+ *
|
|
|
* @param mobile 手机号
|
|
|
*/
|
|
|
private void verifyMobileIsMaximize(String mobile) {
|