mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-09-17 15:47:15 +00:00
feat: 注册流程重构
This commit is contained in:
@@ -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) => {
|
||||||
|
|||||||
@@ -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 || '注册失败')
|
||||||
|
|||||||
Reference in New Issue
Block a user