diff --git a/backend/src/main/java/com/openisle/controller/AuthController.java b/backend/src/main/java/com/openisle/controller/AuthController.java index 7dbeda5c4..bad3abcfe 100644 --- a/backend/src/main/java/com/openisle/controller/AuthController.java +++ b/backend/src/main/java/com/openisle/controller/AuthController.java @@ -48,12 +48,13 @@ public class AuthController { } if (req.getInviteToken() != null && !req.getInviteToken().isEmpty()) { if (!inviteService.validate(req.getInviteToken())) { - return ResponseEntity.badRequest().body(Map.of("error", "Invalid invite token")); + return ResponseEntity.badRequest().body(Map.of("error", "邀请码使用次数过多")); } try { User user = userService.registerWithInvite( req.getUsername(), req.getEmail(), req.getPassword()); inviteService.consume(req.getInviteToken()); + emailService.sendEmail(user.getEmail(), "在网站填写验证码以验证", "您的验证码是 " + user.getVerificationCode()); return ResponseEntity.ok(Map.of( "token", jwtService.generateToken(user.getUsername()), "reason_code", "INVITE_APPROVED" @@ -78,10 +79,26 @@ public class AuthController { public ResponseEntity verify(@RequestBody VerifyRequest req) { boolean ok = userService.verifyCode(req.getUsername(), req.getCode()); if (ok) { - return ResponseEntity.ok(Map.of( - "message", "Verified", - "token", jwtService.generateReasonToken(req.getUsername()) - )); + Optional userOpt = userService.findByUsername(req.getUsername()); + if (userOpt.isEmpty()) { + return ResponseEntity.badRequest().body(Map.of("error", "Invalid credentials")); + } + + User user = userOpt.get(); + + if (user.isApproved()) { + return ResponseEntity.ok(Map.of( + "message", "Verified and isApproved", + "reason_code", "VERIFIED_AND_APPROVED", + "token", jwtService.generateToken(req.getUsername()) + )); + } else { + return ResponseEntity.ok(Map.of( + "message", "Verified", + "reason_code", "VERIFIED", + "token", jwtService.generateReasonToken(req.getUsername()) + )); + } } return ResponseEntity.badRequest().body(Map.of("error", "Invalid verification code")); } diff --git a/backend/src/main/java/com/openisle/service/UserService.java b/backend/src/main/java/com/openisle/service/UserService.java index 6bb15b2f0..8c0dc4432 100644 --- a/backend/src/main/java/com/openisle/service/UserService.java +++ b/backend/src/main/java/com/openisle/service/UserService.java @@ -77,7 +77,7 @@ public class UserService { public User registerWithInvite(String username, String email, String password) { User user = register(username, email, password, "", com.openisle.model.RegisterMode.DIRECT); user.setVerified(true); - user.setVerificationCode(null); + user.setVerificationCode(genCode()); return userRepository.save(user); } diff --git a/frontend_nuxt/components/InviteCodeActivityComponent.vue b/frontend_nuxt/components/InviteCodeActivityComponent.vue index 1ef4e928c..9fef7cfbc 100644 --- a/frontend_nuxt/components/InviteCodeActivityComponent.vue +++ b/frontend_nuxt/components/InviteCodeActivityComponent.vue @@ -48,9 +48,9 @@ onMounted(async () => { isLoadingUser.value = true user.value = await fetchCurrentUser() isLoadingUser.value = false - if (user.value) { - await fetchInvite(false) - } + // if (user.value) { + // await fetchInvite(false) + // } }) const fetchInvite = async (showToast = true) => { diff --git a/frontend_nuxt/pages/signup.vue b/frontend_nuxt/pages/signup.vue index d57296ea4..9158d7387 100644 --- a/frontend_nuxt/pages/signup.vue +++ b/frontend_nuxt/pages/signup.vue @@ -96,6 +96,7 @@ import { discordAuthorize } from '~/utils/discord' import { githubAuthorize } from '~/utils/github' import { googleAuthorize } from '~/utils/google' import { twitterAuthorize } from '~/utils/twitter' +import { loadCurrentUser, setToken } from '~/utils/auth' const route = useRoute() const config = useRuntimeConfig() @@ -160,6 +161,7 @@ const sendVerification = async () => { username: username.value, email: email.value, password: password.value, + inviteToken: inviteToken.value, }), }) isWaitingForEmailSent.value = false @@ -192,11 +194,18 @@ const verifyCode = async () => { }) const data = await res.json() if (res.ok) { - if (registerMode.value === 'WHITELIST') { - navigateTo(`/signup-reason?token=${data.token}`, { replace: true }) - } else { - toast.success('注册成功,请登录') - navigateTo('/login', { replace: true }) + if (data.reason_code === 'VERIFIED_AND_APPROVED') { + toast.success('注册成功') + setToken(data.token) + loadCurrentUser() + navigateTo('/', { replace: true }) + } else if (data.reason_code === 'VERIFIED') { + if (registerMode.value === 'WHITELIST') { + navigateTo(`/signup-reason?token=${data.token}`, { replace: true }) + } else { + toast.success('注册成功,请登录') + navigateTo('/login', { replace: true }) + } } } else { toast.error(data.error || '注册失败')