feat: 注册流程重构

This commit is contained in:
tim
2025-08-18 02:06:48 +08:00
parent 2577992ee3
commit 628d28c12d
4 changed files with 40 additions and 14 deletions
@@ -48,12 +48,13 @@ public class AuthController {
} }
if (req.getInviteToken() != null && !req.getInviteToken().isEmpty()) { if (req.getInviteToken() != null && !req.getInviteToken().isEmpty()) {
if (!inviteService.validate(req.getInviteToken())) { if (!inviteService.validate(req.getInviteToken())) {
return ResponseEntity.badRequest().body(Map.of("error", "Invalid invite token")); return ResponseEntity.badRequest().body(Map.of("error", "邀请码使用次数过多"));
} }
try { try {
User user = userService.registerWithInvite( User user = userService.registerWithInvite(
req.getUsername(), req.getEmail(), req.getPassword()); req.getUsername(), req.getEmail(), req.getPassword());
inviteService.consume(req.getInviteToken()); inviteService.consume(req.getInviteToken());
emailService.sendEmail(user.getEmail(), "在网站填写验证码以验证", "您的验证码是 " + user.getVerificationCode());
return ResponseEntity.ok(Map.of( return ResponseEntity.ok(Map.of(
"token", jwtService.generateToken(user.getUsername()), "token", jwtService.generateToken(user.getUsername()),
"reason_code", "INVITE_APPROVED" "reason_code", "INVITE_APPROVED"
@@ -78,10 +79,26 @@ public class AuthController {
public ResponseEntity<?> verify(@RequestBody VerifyRequest req) { public ResponseEntity<?> verify(@RequestBody VerifyRequest req) {
boolean ok = userService.verifyCode(req.getUsername(), req.getCode()); boolean ok = userService.verifyCode(req.getUsername(), req.getCode());
if (ok) { if (ok) {
return ResponseEntity.ok(Map.of( Optional<User> userOpt = userService.findByUsername(req.getUsername());
"message", "Verified", if (userOpt.isEmpty()) {
"token", jwtService.generateReasonToken(req.getUsername()) 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")); return ResponseEntity.badRequest().body(Map.of("error", "Invalid verification code"));
} }
@@ -77,7 +77,7 @@ public class UserService {
public User registerWithInvite(String username, String email, String password) { public User registerWithInvite(String username, String email, String password) {
User user = register(username, email, password, "", com.openisle.model.RegisterMode.DIRECT); User user = register(username, email, password, "", com.openisle.model.RegisterMode.DIRECT);
user.setVerified(true); user.setVerified(true);
user.setVerificationCode(null); user.setVerificationCode(genCode());
return userRepository.save(user); return userRepository.save(user);
} }
@@ -48,9 +48,9 @@ onMounted(async () => {
isLoadingUser.value = true isLoadingUser.value = true
user.value = await fetchCurrentUser() user.value = await fetchCurrentUser()
isLoadingUser.value = false isLoadingUser.value = false
if (user.value) { // if (user.value) {
await fetchInvite(false) // await fetchInvite(false)
} // }
}) })
const fetchInvite = async (showToast = true) => { const fetchInvite = async (showToast = true) => {
+14 -5
View File
@@ -96,6 +96,7 @@ import { discordAuthorize } from '~/utils/discord'
import { githubAuthorize } from '~/utils/github' import { githubAuthorize } from '~/utils/github'
import { googleAuthorize } from '~/utils/google' import { googleAuthorize } from '~/utils/google'
import { twitterAuthorize } from '~/utils/twitter' import { twitterAuthorize } from '~/utils/twitter'
import { loadCurrentUser, setToken } from '~/utils/auth'
const route = useRoute() const route = useRoute()
const config = useRuntimeConfig() const config = useRuntimeConfig()
@@ -160,6 +161,7 @@ const sendVerification = async () => {
username: username.value, username: username.value,
email: email.value, email: email.value,
password: password.value, password: password.value,
inviteToken: inviteToken.value,
}), }),
}) })
isWaitingForEmailSent.value = false isWaitingForEmailSent.value = false
@@ -192,11 +194,18 @@ const verifyCode = async () => {
}) })
const data = await res.json() const data = await res.json()
if (res.ok) { if (res.ok) {
if (registerMode.value === 'WHITELIST') { if (data.reason_code === 'VERIFIED_AND_APPROVED') {
navigateTo(`/signup-reason?token=${data.token}`, { replace: true }) toast.success('注册成功')
} else { setToken(data.token)
toast.success('注册成功,请登录') loadCurrentUser()
navigateTo('/login', { replace: true }) 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 { } else {
toast.error(data.error || '注册失败') toast.error(data.error || '注册失败')