diff --git a/open-isle-cli/src/views/LoginPageView.vue b/open-isle-cli/src/views/LoginPageView.vue index 0ca76cafd..e78462850 100644 --- a/open-isle-cli/src/views/LoginPageView.vue +++ b/open-isle-cli/src/views/LoginPageView.vue @@ -70,8 +70,12 @@ export default { toast.success('登录成功') this.$router.push('/') } else if (data.reason_code === 'NOT_VERIFIED') { - toast.info('当前邮箱未验证,请先重新填写注册页面并验证') - this.$router.push('/signup') + sessionStorage.setItem('signup_username', data.username) + toast.info('当前邮箱未验证,已经为您重新发送验证码') + this.$router.push({ path: '/signup', query: { verify: 1, u: this.username } }) + } else if (data.reason_code === 'NOT_APPROVED') { + toast.info('您的注册正在审批中, 请留意邮件') + this.$router.push('/') } else { toast.error(data.error || '登录失败') } diff --git a/open-isle-cli/src/views/SignupPageView.vue b/open-isle-cli/src/views/SignupPageView.vue index 19d426106..f68bbc7ff 100644 --- a/open-isle-cli/src/views/SignupPageView.vue +++ b/open-isle-cli/src/views/SignupPageView.vue @@ -105,6 +105,7 @@ export default { } }, async mounted() { + this.username = this.$route.query.u || '' try { const res = await fetch(`${API_BASE_URL}/api/config`) if (res.ok) { @@ -114,7 +115,6 @@ export default { } catch {/* ignore */} if (this.$route.query.verify) { this.emailStep = 1 - this.username = sessionStorage.getItem('signup_username') || '' } }, methods: { @@ -181,7 +181,10 @@ export default { const res = await fetch(`${API_BASE_URL}/api/auth/verify`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username: this.username, code: this.code }) + body: JSON.stringify({ + code: this.code, + username: this.username + }) }) this.isWaitingForEmailVerified = false const data = await res.json() @@ -205,7 +208,7 @@ export default { googleSignIn(() => { this.$router.push('/') }, () => { - this.$router.push('/signup-reason') + this.$router.push('/signup-reason?google=1') }) } } diff --git a/open-isle-cli/src/views/SignupReasonPageView.vue b/open-isle-cli/src/views/SignupReasonPageView.vue index d1c0d1a01..f0de34446 100644 --- a/open-isle-cli/src/views/SignupReasonPageView.vue +++ b/open-isle-cli/src/views/SignupReasonPageView.vue @@ -77,7 +77,7 @@ export default { const data = await res.json() if (res.ok) { toast.success('验证码已发送,请查收邮箱') - this.$router.push('/signup?verify=1') + this.$router.push({ path: '/signup', query: { verify: 1, u: sessionStorage.getItem('signup_username') } }) } else { toast.error(data.error || '发送失败') } diff --git a/src/main/java/com/openisle/controller/AuthController.java b/src/main/java/com/openisle/controller/AuthController.java index 0764c5c59..6332423c2 100644 --- a/src/main/java/com/openisle/controller/AuthController.java +++ b/src/main/java/com/openisle/controller/AuthController.java @@ -68,9 +68,9 @@ public class AuthController { if (captchaEnabled && loginCaptchaEnabled && !captchaService.verify(req.getCaptcha())) { return ResponseEntity.badRequest().body(Map.of("error", "Invalid captcha")); } - Optional userOpt = userService.findByUsername(req.getUsernameOrEmail()); + Optional userOpt = userService.findByUsername(req.getUsername()); if (userOpt.isEmpty()) { - userOpt = userService.findByEmail(req.getUsernameOrEmail()); + userOpt = userService.findByEmail(req.getUsername()); } if (userOpt.isEmpty() || !userService.matchesPassword(userOpt.get(), req.getPassword())) { return ResponseEntity.badRequest().body(Map.of( @@ -79,9 +79,12 @@ public class AuthController { } User user = userOpt.get(); if (!user.isVerified()) { + user = userService.register(user.getUsername(), user.getEmail(), user.getPassword(), user.getRegisterReason(), registerModeService.getRegisterMode()); + emailService.sendEmail(user.getEmail(), "Verification Code", "Your verification code is " + user.getVerificationCode()); return ResponseEntity.badRequest().body(Map.of( "error", "User not verified", - "reason_code", "NOT_VERIFIED")); + "reason_code", "NOT_VERIFIED", + "user_name", user.getUsername())); } if (RegisterMode.WHITELIST.equals(registerModeService.getRegisterMode()) && !user.isApproved()) { return ResponseEntity.badRequest().body(Map.of( @@ -136,7 +139,7 @@ public class AuthController { @Data private static class LoginRequest { - private String usernameOrEmail; + private String username; private String password; private String captcha; }