diff --git a/doc/登录+JWT逻辑.drawio b/doc/登录+JWT逻辑.drawio index 8fa83e7..9d05d20 100644 --- a/doc/登录+JWT逻辑.drawio +++ b/doc/登录+JWT逻辑.drawio @@ -1,6 +1,6 @@ - + @@ -8,131 +8,122 @@ - + - + - + - + - + - - + + - - + + - + - - + + - - - - - + + - + - - + + - - + + - + - - + + + + - - + + - - + + - + - - - - - - - - - + - - + + - + - + - - + + - + - - + + - + - + - + diff --git a/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java b/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java index 6722274..be672f3 100644 --- a/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java +++ b/ruoyi-auth/ruoyi-auth-common/src/main/java/com/ruoyi/auth/common/service/TfaService.java @@ -11,4 +11,8 @@ public interface TfaService { public void doRegister(RegisterBody registerBody); public void doRegisterVerify(RegisterBody registerBody); + + public void doLogin(LoginBody loginBody); + + public String doLoginVerify(LoginBody loginBody); } diff --git a/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java b/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java index 79ed279..0f8ee36 100644 --- a/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java +++ b/ruoyi-auth/ruoyi-auth-starter/src/main/java/com/ruoyi/auth/controller/TfaController.java @@ -67,4 +67,19 @@ public class TfaController extends BaseController { tfaService.doRegisterVerify(registerBody); return success(); } + + @PostMapping("/send/login") + @Anonymous + public AjaxResult sendLogin(@PathVariable String channel, @RequestBody LoginBody loginBody) { + TfaService tfaService = tfaServiceMap.get(channel + "AuthService"); + tfaService.doLogin(loginBody); + return success(); + } + + @PostMapping("/verify/login") + @Anonymous + public AjaxResult verifyLogin(@PathVariable String channel, @RequestBody LoginBody loginBody) { + TfaService tfaService = tfaServiceMap.get(channel + "AuthService"); + return success(tfaService.doLoginVerify(loginBody)); + } } diff --git a/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java b/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java index bc22f76..062b7cb 100644 --- a/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java +++ b/ruoyi-auth/ruoyi-tfa-email/src/main/java/com/ruoyi/tfa/email/service/impl/MailServiceImpl.java @@ -10,14 +10,19 @@ import org.springframework.stereotype.Service; import com.ruoyi.auth.common.enums.OauthVerificationUse; import com.ruoyi.auth.common.utils.RandomCodeUtil; import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.framework.web.service.UserDetailsServiceImpl; import com.ruoyi.system.service.ISysUserService; @@ -33,6 +38,8 @@ public class MailServiceImpl implements IMailService { private TokenService tokenService; @Autowired private UserDetailsServiceImpl userDetailsServiceImpl; + @Autowired + private SysLoginService sysLoginService; private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class); @@ -65,30 +72,25 @@ public class MailServiceImpl implements IMailService { return isValid; } - public void doLogin(LoginBody loginBody, boolean isRegister) { + public void doLogin(LoginBody loginBody) { SysUser sysUser = userService.selectUserByEmail(loginBody.getEmail()); - if (sysUser == null && !isRegister) { + if (sysUser == null) { throw new ServiceException("该邮箱未绑定用户"); } else { sendCode(loginBody.getEmail(), RandomCodeUtil.numberCode(6), OauthVerificationUse.LOGIN); } } - public String doLoginVerify(LoginBody loginBody, boolean isRegister) { + public String doLoginVerify(LoginBody loginBody) { if (checkCode(loginBody.getEmail(), loginBody.getCode(), OauthVerificationUse.LOGIN)) { SysUser sysUser = userService.selectUserByEmail(loginBody.getEmail()); if (sysUser == null) { - if (isRegister) { - sysUser = new SysUser(); - sysUser.setUserName(loginBody.getEmail()); - sysUser.setPassword(SecurityUtils.encryptPassword(RandomCodeUtil.code(16))); - sysUser.setEmail(loginBody.getEmail()); - userService.registerUser(sysUser); - } else { - throw new ServiceException("该邮箱未绑定用户"); - } + throw new ServiceException("该邮箱未绑定用户"); } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) userDetailsServiceImpl.createLoginUser(sysUser); + sysLoginService.recordLoginInfo(loginUser.getUserId()); return tokenService.createToken(loginUser); } else { throw new ServiceException("验证码错误"); @@ -112,6 +114,8 @@ public class MailServiceImpl implements IMailService { sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); sysUser.setEmail(registerBody.getEmail()); userService.registerUser(sysUser); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.REGISTER, + MessageUtils.message("user.register.success"))); } else { throw new ServiceException("验证码错误"); } diff --git a/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java b/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java index d3e4d28..2a69aa6 100644 --- a/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java +++ b/ruoyi-auth/ruoyi-tfa-phone/src/main/java/com/ruoyi/tfa/phone/service/Impl/DySmsServiceImpl.java @@ -11,14 +11,19 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.auth.common.enums.OauthVerificationUse; import com.ruoyi.auth.common.utils.RandomCodeUtil; import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.framework.web.service.UserDetailsServiceImpl; import com.ruoyi.system.service.ISysUserService; @@ -41,6 +46,8 @@ public class DySmsServiceImpl implements DySmsService { private UserDetailsServiceImpl userDetailsServiceImpl; @Autowired private TokenService tokenService; + @Autowired + private SysLoginService sysLoginService; private static final Logger log = LoggerFactory.getLogger(DySmsServiceImpl.class); @@ -75,30 +82,25 @@ public class DySmsServiceImpl implements DySmsService { return isValid; } - public void doLogin(LoginBody loginBody, boolean isRegister) { + public void doLogin(LoginBody loginBody) { SysUser sysUser = userService.selectUserByPhone(loginBody.getPhonenumber()); - if (sysUser == null && !isRegister) { + if (sysUser == null) { throw new ServiceException("该手机号未绑定用户"); } else { sendCode(loginBody.getPhonenumber(), RandomCodeUtil.numberCode(6), OauthVerificationUse.LOGIN); } } - public String doLoginVerify(LoginBody loginBody, boolean isRegister) { + public String doLoginVerify(LoginBody loginBody) { if (checkCode(loginBody.getPhonenumber(), loginBody.getCode(), OauthVerificationUse.LOGIN)) { SysUser sysUser = userService.selectUserByPhone(loginBody.getPhonenumber()); if (sysUser == null) { - if (isRegister) { - sysUser = new SysUser(); - sysUser.setUserName(loginBody.getPhonenumber()); - sysUser.setPassword(SecurityUtils.encryptPassword(RandomCodeUtil.code(16))); - sysUser.setPhonenumber(loginBody.getPhonenumber()); - userService.registerUser(sysUser); - } else { - throw new ServiceException("该手机号未绑定用户"); - } + throw new ServiceException("该手机号未绑定用户"); } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) userDetailsServiceImpl.createLoginUser(sysUser); + sysLoginService.recordLoginInfo(loginUser.getUserId()); return tokenService.createToken(loginUser); } else { throw new ServiceException("验证码错误"); @@ -122,6 +124,8 @@ public class DySmsServiceImpl implements DySmsService { sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); sysUser.setPhonenumber(registerBody.getPhonenumber()); userService.registerUser(sysUser); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.REGISTER, + MessageUtils.message("user.register.success"))); } else { throw new ServiceException("验证码错误"); }