From 3b8e501a0b7263c38c045a11bd3312ed7981886f Mon Sep 17 00:00:00 2001 From: TinyAnts Date: Tue, 20 Dec 2022 15:22:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mdd/front/service/ILoginService.java | 8 +- .../front/service/impl/LoginServiceImpl.java | 213 +++++++++--------- 2 files changed, 108 insertions(+), 113 deletions(-) diff --git a/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java b/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java index 85bfcb95..648df3fd 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java @@ -20,13 +20,13 @@ public interface ILoginService { void register(UserRegisterValidate userRegisterValidate); /** - * 微信登录 + * 账号登录 * * @author fzr * @param params 参数 * @return LoginTokenVo */ - LoginTokenVo mnpLogin(Map params); + LoginTokenVo accountLogin(Map params); /** * 手机登录 @@ -38,13 +38,13 @@ public interface ILoginService { LoginTokenVo mobileLogin(Map params); /** - * 账号登录 + * 微信登录 * * @author fzr * @param params 参数 * @return LoginTokenVo */ - LoginTokenVo accountLogin(Map params); + LoginTokenVo mnpLogin(Map params); /** * 公众号登录 diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java index 585f6ad8..b6c1e55a 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java @@ -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 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() + .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 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() + .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 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() - .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 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() - .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; + } + /** * 生成用户编号 *