优化登录代码

This commit is contained in:
TinyAnts 2022-12-20 15:22:17 +08:00
parent 3e97c2201b
commit 3b8e501a0b
2 changed files with 108 additions and 113 deletions

View File

@ -20,13 +20,13 @@ public interface ILoginService {
void register(UserRegisterValidate userRegisterValidate);
/**
* 微信登录
* 账号登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
LoginTokenVo mnpLogin(Map<String, String> params);
LoginTokenVo accountLogin(Map<String, String> params);
/**
* 手机登录
@ -38,13 +38,13 @@ public interface ILoginService {
LoginTokenVo mobileLogin(Map<String, String> params);
/**
* 账号登录
* 微信登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
LoginTokenVo accountLogin(Map<String, String> params);
LoginTokenVo mnpLogin(Map<String, String> params);
/**
* 公众号登录

View File

@ -17,7 +17,6 @@ import com.mdd.front.config.FrontConfig;
import com.mdd.front.service.ILoginService;
import com.mdd.front.validate.UserRegisterValidate;
import com.mdd.front.vo.LoginTokenVo;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
@ -79,6 +78,81 @@ public class LoginServiceImpl implements ILoginService {
userMapper.insert(user);
}
/**
* 账号登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
@Override
public LoginTokenVo accountLogin(Map<String, String> params) {
Assert.notNull(params.get("username"), "username参数缺失!");
Assert.notNull(params.get("password"), "password参数缺失!");
String username = params.get("username");
String password = params.get("password");
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,password,salt,mobile,is_disable")
.eq("username", username)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(user, "账号不存在!");
String pwd = ToolsUtils.makeMd5(password+user.getSalt());
Assert.isFalse(!pwd.equals(user.getPassword()), "账号或密码错误!");
Assert.isFalse(user.getIsDisable() != 0, "账号已被禁用!");
// 更新登录信息
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
return this.makeLoginToken(user.getId(), user.getMobile());
}
/**
* 手机号登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
@Override
public LoginTokenVo mobileLogin(Map<String, String> params) {
Assert.notNull(params.get("mobile"), "mobile参数缺失!");
Assert.notNull(params.get("code"), "code参数缺失!");
String mobile = params.get("mobile");
String code = params.get("code").toLowerCase();
// 校验验证码
int typeCode = NoticeEnum.SMS_LOGIN_CODE.getCode();
Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) {
throw new OperateException("验证码错误!");
}
// 删除验证码
RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
// 查询手机号
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,mobile,is_disable")
.eq("mobile", mobile)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(user, "账号不存在!");
Assert.isFalse(user.getIsDisable() != 0, "账号已禁用!");
// 更新登录信息
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
return this.makeLoginToken(user.getId(), user.getMobile());
}
/**
* 微信小程序登录
*
@ -166,111 +240,13 @@ public class LoginServiceImpl implements ILoginService {
userMapper.updateById(user);
}
String token = ToolsUtils.makeToken();
int tokenValidTime = Integer.parseInt(YmlUtils.get("like.token-valid-time"));
RedisUtils.set(FrontConfig.frontendTokenKey+token, userId, tokenValidTime);
LoginTokenVo vo = new LoginTokenVo();
vo.setId(userId);
vo.setIsBindMobile(!user.getMobile().equals(""));
vo.setToken(token);
return vo;
return this.makeLoginToken(userId, user.getMobile());
} catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
}
}
/**
* 手机号登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
@Override
public LoginTokenVo mobileLogin(Map<String, String> params) {
Assert.notNull(params.get("mobile"), "mobile参数缺失!");
Assert.notNull(params.get("code"), "code参数缺失!");
String mobile = params.get("mobile");
String code = params.get("code").toLowerCase();
// 校验验证码
int typeCode = NoticeEnum.SMS_LOGIN_CODE.getCode();
Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) {
throw new OperateException("验证码错误!");
}
// 删除验证码
RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
// 查询手机号
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,mobile,is_disable")
.eq("mobile", mobile)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(user, "账号不存在!");
Assert.isFalse(user.getIsDisable() != 0, "账号已禁用!");
// 更新登录信息
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
String token = ToolsUtils.makeToken();
int tokenValidTime = Integer.parseInt(YmlUtils.get("like.token-valid-time"));
RedisUtils.set(FrontConfig.frontendTokenKey+token, user.getId(), tokenValidTime);
LoginTokenVo vo = new LoginTokenVo();
vo.setId(user.getId());
vo.setIsBindMobile(!user.getMobile().equals(""));
vo.setToken(token);
return vo;
}
/**
* 账号登录
*
* @author fzr
* @param params 参数
* @return LoginTokenVo
*/
@Override
public LoginTokenVo accountLogin(Map<String, String> params) {
Assert.notNull(params.get("username"), "username参数缺失!");
Assert.notNull(params.get("password"), "password参数缺失!");
String username = params.get("username");
String password = params.get("password");
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,username,password,salt,mobile,is_disable")
.eq("username", username)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(user, "账号不存在!");
String pwd = ToolsUtils.makeMd5(password+user.getSalt());
Assert.isFalse(!pwd.equals(user.getPassword()), "账号或密码错误!");
Assert.isFalse(user.getIsDisable() != 0, "账号已被禁用!");
// 更新登录信息
user.setLastLoginIp(IpUtils.getHostIp());
user.setLastLoginTime(System.currentTimeMillis() / 1000);
userMapper.updateById(user);
String token = ToolsUtils.makeToken();
int tokenValidTime = Integer.parseInt(YmlUtils.get("like.token-valid-time"))+1;
RedisUtils.set(FrontConfig.frontendTokenKey+token, user.getId(), tokenValidTime-1);
LoginTokenVo vo = new LoginTokenVo();
vo.setId(user.getId());
vo.setIsBindMobile(!user.getMobile().equals(""));
vo.setToken(token);
return vo;
}
/**
* 公众号登录
*
@ -345,15 +321,7 @@ public class LoginServiceImpl implements ILoginService {
userMapper.updateById(user);
}
String token = ToolsUtils.makeToken();
int tokenValidTime = Integer.parseInt(YmlUtils.get("like.token-valid-time"))+1;
RedisUtils.set(FrontConfig.frontendTokenKey+token, userId, tokenValidTime-1);
LoginTokenVo vo = new LoginTokenVo();
vo.setId(user.getId());
vo.setIsBindMobile(!user.getMobile().equals(""));
vo.setToken(token);
return vo;
return this.makeLoginToken(userId, user.getMobile());
} catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
}
@ -418,6 +386,13 @@ public class LoginServiceImpl implements ILoginService {
userMapper.updateById(user);
}
/**
* 扫码链接
*
* @author fzr
* @param session session
* @return String
*/
@Override
public String getScanCode(HttpSession session) {
// 获取AppId
@ -448,6 +423,26 @@ public class LoginServiceImpl implements ILoginService {
return String.format(baseUrl, appId, redirectUrl, state);
}
/**
* 生成登录Token
*
* @author fzr
* @param userId 用户ID
* @param mobile 用户手机
* @return LoginTokenVo
*/
private LoginTokenVo makeLoginToken(Integer userId, String mobile) {
String token = ToolsUtils.makeToken();
int tokenValidTime = Integer.parseInt(YmlUtils.get("like.token-valid-time"));
RedisUtils.set(FrontConfig.frontendTokenKey+token, userId, tokenValidTime);
LoginTokenVo vo = new LoginTokenVo();
vo.setId(userId);
vo.setIsBindMobile(!mobile.equals(""));
vo.setToken(token);
return vo;
}
/**
* 生成用户编号
*