From bb9b13664f836b429ec7c533ea8172c28c1a8b92 Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 15 Jul 2025 13:54:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B3=A8=E5=86=8C=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- open-isle-cli/src/views/LoginPageView.vue | 8 ++++++-- open-isle-cli/src/views/SignupPageView.vue | 9 ++++++--- open-isle-cli/src/views/SignupReasonPageView.vue | 2 +- .../java/com/openisle/controller/AuthController.java | 9 ++++++--- 4 files changed, 19 insertions(+), 9 deletions(-) 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 bcdf81b3b..71741beaf 100644 --- a/src/main/java/com/openisle/controller/AuthController.java +++ b/src/main/java/com/openisle/controller/AuthController.java @@ -68,7 +68,7 @@ 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() || !userService.matchesPassword(userOpt.get(), req.getPassword())) { return ResponseEntity.badRequest().body(Map.of( "error", "Invalid credentials", @@ -76,9 +76,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( @@ -133,7 +136,7 @@ public class AuthController { @Data private static class LoginRequest { - private String usernameOrEmail; + private String username; private String password; private String captcha; }