|
@@ -3,12 +3,12 @@ package com.zanxiang.sdk.service.Impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.zanxiang.common.domain.ResultVO;
|
|
import com.zanxiang.common.domain.ResultVO;
|
|
import com.zanxiang.common.enums.AccountStatusEnum;
|
|
import com.zanxiang.common.enums.AccountStatusEnum;
|
|
|
|
+import com.zanxiang.common.enums.DeviceTypeEnum;
|
|
import com.zanxiang.common.enums.HttpStatusEnum;
|
|
import com.zanxiang.common.enums.HttpStatusEnum;
|
|
import com.zanxiang.common.exception.BaseException;
|
|
import com.zanxiang.common.exception.BaseException;
|
|
import com.zanxiang.common.text.UUID;
|
|
import com.zanxiang.common.text.UUID;
|
|
import com.zanxiang.common.utils.IpUtils;
|
|
import com.zanxiang.common.utils.IpUtils;
|
|
import com.zanxiang.common.utils.JsonUtil;
|
|
import com.zanxiang.common.utils.JsonUtil;
|
|
-import com.zanxiang.common.utils.StringUtils;
|
|
|
|
import com.zanxiang.common.utils.URIUtil;
|
|
import com.zanxiang.common.utils.URIUtil;
|
|
import com.zanxiang.mybatis.entity.User;
|
|
import com.zanxiang.mybatis.entity.User;
|
|
import com.zanxiang.sdk.common.constant.ApiUrlConstant;
|
|
import com.zanxiang.sdk.common.constant.ApiUrlConstant;
|
|
@@ -16,14 +16,17 @@ import com.zanxiang.sdk.common.constant.RedisKeyConstant;
|
|
import com.zanxiang.sdk.common.util.RedisUtil;
|
|
import com.zanxiang.sdk.common.util.RedisUtil;
|
|
import com.zanxiang.sdk.common.util.RegisterUtil;
|
|
import com.zanxiang.sdk.common.util.RegisterUtil;
|
|
import com.zanxiang.sdk.domain.dto.UserOauthDTO;
|
|
import com.zanxiang.sdk.domain.dto.UserOauthDTO;
|
|
-import com.zanxiang.sdk.domain.params.*;
|
|
|
|
|
|
+import com.zanxiang.sdk.domain.params.LoginMobileParam;
|
|
|
|
+import com.zanxiang.sdk.domain.params.LoginPasswordParam;
|
|
|
|
+import com.zanxiang.sdk.domain.params.QqLoginCallbackParam;
|
|
|
|
+import com.zanxiang.sdk.domain.params.UserData;
|
|
import com.zanxiang.sdk.domain.vo.UserLoginVO;
|
|
import com.zanxiang.sdk.domain.vo.UserLoginVO;
|
|
import com.zanxiang.sdk.service.*;
|
|
import com.zanxiang.sdk.service.*;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.logging.log4j.util.Strings;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
@@ -39,7 +42,7 @@ import java.util.Objects;
|
|
*/
|
|
*/
|
|
@Slf4j
|
|
@Slf4j
|
|
@Service
|
|
@Service
|
|
-public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
|
|
|
|
+public class LoginServiceImpl implements RegisterLoginService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private RedisUtil<String> redisUtil;
|
|
private RedisUtil<String> redisUtil;
|
|
@@ -80,6 +83,156 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
@Value("${auth.vx-appId}")
|
|
@Value("${auth.vx-appId}")
|
|
private String vxAppId;
|
|
private String vxAppId;
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 用户名注册或者登录
|
|
|
|
+ *
|
|
|
|
+ * @param param : 注册登录参数
|
|
|
|
+ * @param request : 请求信息
|
|
|
|
+ * @return : 返回用户登录信息
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public ResultVO<UserLoginVO> loginPassword(LoginPasswordParam param, HttpServletRequest request) {
|
|
|
|
+ String username = param.getUsername();
|
|
|
|
+ String password = param.getPassword();
|
|
|
|
+ Long gameId = param.getGameId();
|
|
|
|
+ Integer type = param.getType();
|
|
|
|
+ //用户信息
|
|
|
|
+ User user;
|
|
|
|
+ //登录, 进行登录检测
|
|
|
|
+ if (Objects.equals(type, LoginPasswordParam.LOGIN)) {
|
|
|
|
+ user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
|
|
|
|
+ //用户信息不存在
|
|
|
|
+ if (user == null) {
|
|
|
|
+ return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
|
|
|
|
+ }
|
|
|
|
+ //判断账号是否停用
|
|
|
|
+ if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
|
|
|
|
+ return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
|
|
|
|
+ }
|
|
|
|
+ //验证密码
|
|
|
|
+ if (!Objects.equals(RegisterUtil.cmfPassword(password), user.getPassword())) {
|
|
|
|
+ return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //注册, 用户名密码校验
|
|
|
|
+ HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
|
|
|
|
+ if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
+ return new ResultVO<>(checkRegisterEnum);
|
|
|
|
+ }
|
|
|
|
+ //创建用户信息
|
|
|
|
+ user = User.builder()
|
|
|
|
+ .gameId(gameId)
|
|
|
|
+ .username(username)
|
|
|
|
+ .password(RegisterUtil.cmfPassword(password))
|
|
|
|
+ .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType())
|
|
|
|
+ .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
|
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
|
+ .build();
|
|
|
|
+ userService.save(user);
|
|
|
|
+ }
|
|
|
|
+ //登录的ip
|
|
|
|
+ String realIp = IpUtils.getRealIp(request);
|
|
|
|
+ //插入用户登录记录
|
|
|
|
+ userLoginLogService.addUserLoginLog(realIp, user, gameId, 0);
|
|
|
|
+ //验证通过, 获取token
|
|
|
|
+ String userToken = userTokenService.getUserToken(user.getId(), DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType());
|
|
|
|
+ //构造用户登录信息
|
|
|
|
+ UserLoginVO userLoginVO = UserLoginVO.builder()
|
|
|
|
+ .userId(user.getId())
|
|
|
|
+ .userName(user.getUsername())
|
|
|
|
+ .token(userToken)
|
|
|
|
+ .authentication(user.getAuthentication())
|
|
|
|
+ .bindPhone(Strings.isBlank(user.getMobile()) ? 0 : 1)
|
|
|
|
+ .build();
|
|
|
|
+ //返回登录信息
|
|
|
|
+ return new ResultVO<>(userLoginVO);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 手机号登录
|
|
|
|
+ *
|
|
|
|
+ * @param param : 手机号登录参数
|
|
|
|
+ * @param request : HttpServletRequest
|
|
|
|
+ * @return : 返回登录信息
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public ResultVO<UserLoginVO> loginMobile(LoginMobileParam param, HttpServletRequest request) {
|
|
|
|
+ Integer type = param.getType();
|
|
|
|
+ String mobile = param.getMobile();
|
|
|
|
+ String code = param.getCode();
|
|
|
|
+ Long gameId = param.getGameId();
|
|
|
|
+ //验证码校验
|
|
|
|
+ HttpStatusEnum httpStatusEnum = smsService.smsCheck(type, mobile, code);
|
|
|
|
+ //验证不通过, 返回
|
|
|
|
+ if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
+ return new ResultVO<>(httpStatusEnum);
|
|
|
|
+ }
|
|
|
|
+ //获取用户信息
|
|
|
|
+ User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
|
|
|
|
+ //用户信息不存在, 直接注册
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = User.builder()
|
|
|
|
+ .gameId(gameId)
|
|
|
|
+ .mobile(mobile)
|
|
|
|
+ .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType())
|
|
|
|
+ .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
|
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
|
+ .build();
|
|
|
|
+ userService.save(user);
|
|
|
|
+ } else {
|
|
|
|
+ //判断账号是否停用
|
|
|
|
+ if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
|
|
|
|
+ return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //验证通过, 获取token
|
|
|
|
+ String userToken = userTokenService.getUserToken(user.getId(), DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType());
|
|
|
|
+ //登录的ip
|
|
|
|
+ String realIp = IpUtils.getRealIp(request);
|
|
|
|
+ //插入用户登录记录
|
|
|
|
+ userLoginLogService.addUserLoginLog(realIp, user, gameId, 0);
|
|
|
|
+ //构造返回
|
|
|
|
+ //构造用户登录信息
|
|
|
|
+ UserLoginVO userLoginVO = UserLoginVO.builder()
|
|
|
|
+ .userId(user.getId())
|
|
|
|
+ .userName(user.getUsername())
|
|
|
|
+ .token(userToken)
|
|
|
|
+ .authentication(user.getAuthentication())
|
|
|
|
+ .bindPhone(Strings.isBlank(user.getMobile()) ? 0 : 1)
|
|
|
|
+ .build();
|
|
|
|
+ //返回登录信息
|
|
|
|
+ return new ResultVO<>(userLoginVO);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 登录用户名密码合规检测
|
|
|
|
+ *
|
|
|
|
+ * @param username : 用户名验证
|
|
|
|
+ * @param password : 密码验证
|
|
|
|
+ * @return : 返回验证结果
|
|
|
|
+ */
|
|
|
|
+ private HttpStatusEnum checkRegister(String username, String password) {
|
|
|
|
+ //用户名合规检测
|
|
|
|
+ HttpStatusEnum checkUserNameEnum = RegisterUtil.checkUserName(username);
|
|
|
|
+ if (Objects.equals(checkUserNameEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
+ return checkUserNameEnum;
|
|
|
|
+ }
|
|
|
|
+ //判断用户名是否存在敏感词
|
|
|
|
+ if (wordCheckService.hasWord(username)) {
|
|
|
|
+ return HttpStatusEnum.USERNAME_SENSITIVE;
|
|
|
|
+ }
|
|
|
|
+ //判断用户名是否已存在
|
|
|
|
+ if (userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username)) > 0) {
|
|
|
|
+ return HttpStatusEnum.USERNAME_EXISTS;
|
|
|
|
+ }
|
|
|
|
+ //密码验证
|
|
|
|
+ return RegisterUtil.checkPassword(password);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //-------------------------------- 微信和QQ授权登录(暂时没有用到) --------------------------------
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* QQ授权注册登录
|
|
* QQ授权注册登录
|
|
*
|
|
*
|
|
@@ -107,15 +260,15 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
/**
|
|
/**
|
|
* QQ授权注册登录回调
|
|
* QQ授权注册登录回调
|
|
*
|
|
*
|
|
- * @param qqLoginCallbackParam : 回调参数
|
|
|
|
- * @param request : request
|
|
|
|
- * @param userData : userData
|
|
|
|
|
|
+ * @param param : 回调参数
|
|
|
|
+ * @param request : request
|
|
|
|
+ * @param userData : userData
|
|
* @return : 返回登录token
|
|
* @return : 返回登录token
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ResultVO<UserLoginVO> qqLoginCallback(QqLoginCallbackParam qqLoginCallbackParam, HttpServletRequest request, UserData userData) {
|
|
|
|
- String code = qqLoginCallbackParam.getCode();
|
|
|
|
- String state = qqLoginCallbackParam.getState();
|
|
|
|
|
|
+ public ResultVO<UserLoginVO> qqLoginCallback(QqLoginCallbackParam param, HttpServletRequest request, UserData userData) {
|
|
|
|
+ String code = param.getCode();
|
|
|
|
+ String state = param.getState();
|
|
Integer deviceType = userData.getDeviceType();
|
|
Integer deviceType = userData.getDeviceType();
|
|
//验证state,如果不一致,可能被CSRF攻击
|
|
//验证state,如果不一致,可能被CSRF攻击
|
|
this.checkState(state);
|
|
this.checkState(state);
|
|
@@ -130,11 +283,11 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
//登录的ip
|
|
//登录的ip
|
|
String realIp = IpUtils.getRealIp(request);
|
|
String realIp = IpUtils.getRealIp(request);
|
|
//插入用户登录记录
|
|
//插入用户登录记录
|
|
- userLoginLogService.addUserLoginLog(realIp, user, qqLoginCallbackParam.getGameId());
|
|
|
|
|
|
+ userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
|
|
//移出state
|
|
//移出state
|
|
redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
//构造返回
|
|
//构造返回
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
|
|
+ return new ResultVO<>(new UserLoginVO());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -166,16 +319,16 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
/**
|
|
/**
|
|
* 微信授权注册登录回调
|
|
* 微信授权注册登录回调
|
|
*
|
|
*
|
|
- * @param qqLoginCallbackParam : 回调参数
|
|
|
|
- * @param request : request
|
|
|
|
- * @param userData : userData
|
|
|
|
|
|
+ * @param param : 回调参数
|
|
|
|
+ * @param request : request
|
|
|
|
+ * @param userData : userData
|
|
* @return : 返回登录token
|
|
* @return : 返回登录token
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ResultVO<UserLoginVO> vxLoginCallback(QqLoginCallbackParam qqLoginCallbackParam, HttpServletRequest request, UserData userData) {
|
|
|
|
|
|
+ public ResultVO<UserLoginVO> vxLoginCallback(QqLoginCallbackParam param, HttpServletRequest request, UserData userData) {
|
|
Integer deviceType = userData.getDeviceType();
|
|
Integer deviceType = userData.getDeviceType();
|
|
- String code = qqLoginCallbackParam.getCode();
|
|
|
|
- String state = qqLoginCallbackParam.getState();
|
|
|
|
|
|
+ String code = param.getCode();
|
|
|
|
+ String state = param.getState();
|
|
//验证state,如果不一致,可能被CSRF攻击
|
|
//验证state,如果不一致,可能被CSRF攻击
|
|
this.checkState(state);
|
|
this.checkState(state);
|
|
//获取用户信息
|
|
//获取用户信息
|
|
@@ -189,192 +342,11 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
//用户登录成功
|
|
//用户登录成功
|
|
String userToken = userTokenService.getUserToken(userOauthDTO.getId(), deviceType);
|
|
String userToken = userTokenService.getUserToken(userOauthDTO.getId(), deviceType);
|
|
//插入用户登录记录
|
|
//插入用户登录记录
|
|
- userLoginLogService.addUserLoginLog(realIp, user, qqLoginCallbackParam.getGameId());
|
|
|
|
|
|
+ userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
|
|
//移出state
|
|
//移出state
|
|
redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
//构造返回
|
|
//构造返回
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 用户名密码注册
|
|
|
|
- *
|
|
|
|
- * @param registerPasswordParam : 用户名密码注册参数
|
|
|
|
- * @param request : request
|
|
|
|
- * @param userData : userData
|
|
|
|
- * @return : 返回注册结果
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public ResultVO<UserLoginVO> registerPassword(RegisterPasswordParam registerPasswordParam, HttpServletRequest request, UserData userData) {
|
|
|
|
- String username = registerPasswordParam.getUsername();
|
|
|
|
- String password = registerPasswordParam.getPassword();
|
|
|
|
- //用户名密码校验
|
|
|
|
- HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
|
|
|
|
- if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
- return new ResultVO<>(checkRegisterEnum);
|
|
|
|
- }
|
|
|
|
- //创建用户信息
|
|
|
|
- User user = User.builder()
|
|
|
|
- .username(registerPasswordParam.getUsername())
|
|
|
|
- .password(RegisterUtil.cmfPassword(password))
|
|
|
|
- .deviceId(registerPasswordParam.getDeviceId())
|
|
|
|
- .deviceType(registerPasswordParam.getDeviceType())
|
|
|
|
- .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
|
|
|
|
- .createTime(LocalDateTime.now())
|
|
|
|
- .updateTime(LocalDateTime.now())
|
|
|
|
- .build();
|
|
|
|
- userService.save(user);
|
|
|
|
- //登录的ip
|
|
|
|
- String realIp = IpUtils.getRealIp(request);
|
|
|
|
- //插入用户登录记录
|
|
|
|
- userLoginLogService.addUserLoginLog(realIp, user, registerPasswordParam.getGameId());
|
|
|
|
- //获取token
|
|
|
|
- String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
|
|
|
|
- String gameId = registerPasswordParam.getGameId();
|
|
|
|
- //如果游戏id不为空,则自动创建游戏用户
|
|
|
|
- if (StringUtils.isNotEmpty(gameId)) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- //返回用户token
|
|
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 手机号注册
|
|
|
|
- *
|
|
|
|
- * @param registerMobileParam : 手机注册参数
|
|
|
|
- * @param request : HttpServletRequest
|
|
|
|
- * @param userData : userData
|
|
|
|
- * @return : 返回注册结果
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
|
- public ResultVO<UserLoginVO> registerMobile(RegisterMobileParam registerMobileParam, HttpServletRequest request, UserData userData) {
|
|
|
|
- Integer type = registerMobileParam.getType();
|
|
|
|
- String mobile = registerMobileParam.getMobile();
|
|
|
|
- String code = registerMobileParam.getCode();
|
|
|
|
- String password = registerMobileParam.getPassword();
|
|
|
|
- //校验手机验证码
|
|
|
|
- HttpStatusEnum codeCheckEnum = smsService.smsCheck(type, mobile, code);
|
|
|
|
- if (!Objects.equals(codeCheckEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
- return new ResultVO<>(codeCheckEnum);
|
|
|
|
- }
|
|
|
|
- //判断手机号是否已经注册
|
|
|
|
- if (userService.count(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile)) > 0) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.PHONE_IS_REG);
|
|
|
|
- }
|
|
|
|
- //验证密码是否合规
|
|
|
|
- HttpStatusEnum passwordCheckEnum = RegisterUtil.checkPassword(password);
|
|
|
|
- if (!Objects.equals(passwordCheckEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
- return new ResultVO<>(passwordCheckEnum);
|
|
|
|
- }
|
|
|
|
- //创建用户信息
|
|
|
|
- User user = User.builder()
|
|
|
|
- .username(mobile)
|
|
|
|
- .mobile(mobile)
|
|
|
|
- .password(RegisterUtil.cmfPassword(password))
|
|
|
|
- .deviceId(registerMobileParam.getDeviceId())
|
|
|
|
- .deviceType(userData.getDeviceType())
|
|
|
|
- .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
|
|
|
|
- .createTime(LocalDateTime.now())
|
|
|
|
- .updateTime(LocalDateTime.now())
|
|
|
|
- .build();
|
|
|
|
- userService.save(user);
|
|
|
|
- //获取token
|
|
|
|
- String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
|
|
|
|
- //登录的ip
|
|
|
|
- String realIp = IpUtils.getRealIp(request);
|
|
|
|
- //插入用户登录记录
|
|
|
|
- userLoginLogService.addUserLoginLog(realIp, user, registerMobileParam.getGameId());
|
|
|
|
- //返回用户token
|
|
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 用户名密码登录
|
|
|
|
- *
|
|
|
|
- * @param userLoginParam : 登录参数
|
|
|
|
- * @param request : HttpServletRequest
|
|
|
|
- * @param userData : userData
|
|
|
|
- * @return : 返回登录token
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public ResultVO<UserLoginVO> loginPassword(LoginPasswordParam userLoginParam, HttpServletRequest request, UserData userData) {
|
|
|
|
- //用户名
|
|
|
|
- String username = userLoginParam.getUsername();
|
|
|
|
- //密码
|
|
|
|
- String password = userLoginParam.getPassword();
|
|
|
|
- //用户信息
|
|
|
|
- User user;
|
|
|
|
- //验证用户名是否为手机号
|
|
|
|
- if (StringUtils.checkPhone(username)) {
|
|
|
|
- user = userService.getOne(new LambdaQueryWrapper<User>().and(qw -> qw.eq(User::getMobile, username)
|
|
|
|
- .or().eq(User::getUsername, username)));
|
|
|
|
- } else {
|
|
|
|
- user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
|
|
|
|
- }
|
|
|
|
- //用户信息不存在
|
|
|
|
- if (user == null) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
|
|
|
|
- }
|
|
|
|
- //判断账号是否停用
|
|
|
|
- if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
|
|
|
|
- }
|
|
|
|
- //验证密码
|
|
|
|
- if (!Objects.equals(RegisterUtil.cmfPassword(password), user.getPassword())) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
|
|
|
|
- }
|
|
|
|
- //验证通过, 获取token
|
|
|
|
- String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
|
|
|
|
- //登录的ip
|
|
|
|
- String realIp = IpUtils.getRealIp(request);
|
|
|
|
- //插入用户登录记录
|
|
|
|
- userLoginLogService.addUserLoginLog(realIp, user, userLoginParam.getGameId());
|
|
|
|
- //构造返回
|
|
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 手机号登录
|
|
|
|
- *
|
|
|
|
- * @param loginMobileParam : 手机号登录参数
|
|
|
|
- * @param request : HttpServletRequest
|
|
|
|
- * @param userData : userData
|
|
|
|
- * @return : 返回登录信息
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public ResultVO<UserLoginVO> loginMobile(LoginMobileParam loginMobileParam, HttpServletRequest request, UserData userData) {
|
|
|
|
- Integer type = loginMobileParam.getType();
|
|
|
|
- String mobile = loginMobileParam.getMobile();
|
|
|
|
- String code = loginMobileParam.getCode();
|
|
|
|
- //验证码校验
|
|
|
|
- HttpStatusEnum httpStatusEnum = smsService.smsCheck(type, mobile, code);
|
|
|
|
- //验证不通过, 返回
|
|
|
|
- if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
- return new ResultVO<>(httpStatusEnum);
|
|
|
|
- }
|
|
|
|
- //获取用户信息
|
|
|
|
- User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
|
|
|
|
- //用户信息不存在
|
|
|
|
- if (user == null) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.PHONE_NOT_REG);
|
|
|
|
- }
|
|
|
|
- //判断账号是否停用
|
|
|
|
- if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
|
|
|
|
- return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
|
|
|
|
- }
|
|
|
|
- //验证通过, 获取token
|
|
|
|
- String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
|
|
|
|
- //登录的ip
|
|
|
|
- String realIp = IpUtils.getRealIp(request);
|
|
|
|
- //插入用户登录记录
|
|
|
|
- userLoginLogService.addUserLoginLog(realIp, user, loginMobileParam.getGameId());
|
|
|
|
- //构造返回
|
|
|
|
- return new ResultVO<>(new UserLoginVO(userToken));
|
|
|
|
|
|
+ return new ResultVO<>(new UserLoginVO());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -406,28 +378,14 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 登录用户名密码合规检测
|
|
|
|
|
|
+ * state参数检测
|
|
*
|
|
*
|
|
- * @param username : 用户名验证
|
|
|
|
- * @param password : 密码验证
|
|
|
|
- * @return : 返回验证结果
|
|
|
|
|
|
+ * @param state : 随机密钥
|
|
*/
|
|
*/
|
|
- private HttpStatusEnum checkRegister(String username, String password) {
|
|
|
|
- //用户名合规检测
|
|
|
|
- HttpStatusEnum checkUserNameEnum = RegisterUtil.checkUserName(username);
|
|
|
|
- if (Objects.equals(checkUserNameEnum, HttpStatusEnum.SUCCESS)) {
|
|
|
|
- return checkUserNameEnum;
|
|
|
|
- }
|
|
|
|
- //判断用户名是否存在敏感词
|
|
|
|
- if (wordCheckService.hasWord(username)) {
|
|
|
|
- return HttpStatusEnum.USERNAME_SENSITIVE;
|
|
|
|
- }
|
|
|
|
- //判断用户名是否已存在
|
|
|
|
- if (userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username)) > 0) {
|
|
|
|
- return HttpStatusEnum.USERNAME_EXISTS;
|
|
|
|
|
|
+ private void checkState(String state) {
|
|
|
|
+ if (!redisUtil.isMemberInSet(RedisKeyConstant.AUTH_STATE_KEY, state)) {
|
|
|
|
+ throw new BaseException("State验证失败");
|
|
}
|
|
}
|
|
- //密码验证
|
|
|
|
- return RegisterUtil.checkPassword(password);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -440,15 +398,4 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
|
|
redisUtil.addToSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
redisUtil.addToSet(RedisKeyConstant.AUTH_STATE_KEY, state);
|
|
return state;
|
|
return state;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
- * state参数检测
|
|
|
|
- *
|
|
|
|
- * @param state : 随机密钥
|
|
|
|
- */
|
|
|
|
- private void checkState(String state) {
|
|
|
|
- if (!redisUtil.isMemberInSet(RedisKeyConstant.AUTH_STATE_KEY, state)) {
|
|
|
|
- throw new BaseException("State验证失败");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
}
|
|
}
|