修复注册成功后长时间处理中不跳转问题

This commit is contained in:
Your Name 2026-02-09 01:43:44 +08:00
parent 1e07c6ae26
commit 42173615a5

View File

@ -2,8 +2,7 @@
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useSession } from "next-auth/react";
import { useActionState, useEffect, useState } from "react";
import { useActionState, useEffect, useRef, useState } from "react";
import { AuthForm } from "@/components/auth-form";
import { SubmitButton } from "@/components/submit-button";
import { toast } from "@/components/toast";
@ -16,6 +15,7 @@ export default function Page() {
const [isSuccessful, setIsSuccessful] = useState(false);
const [siteName, setSiteName] = useState("AI Chatbot");
const [siteLogo, setSiteLogo] = useState<string | null>(null);
const redirectTimerRef = useRef<number | null>(null);
useEffect(() => {
// 获取认证设置并检查是否开放注册
@ -46,28 +46,42 @@ export default function Page() {
}
);
const { update: updateSession } = useSession();
// biome-ignore lint/correctness/useExhaustiveDependencies: router and updateSession are stable refs
// biome-ignore lint/correctness/useExhaustiveDependencies: router is a stable ref
useEffect(() => {
if (redirectTimerRef.current) {
window.clearTimeout(redirectTimerRef.current);
redirectTimerRef.current = null;
}
if (state.status === "user_exists") {
setIsSuccessful(false);
toast({ type: "error", description: "账号已存在" });
} else if (state.status === "failed") {
setIsSuccessful(false);
toast({ type: "error", description: "创建账号失败" });
} else if (state.status === "invalid_data") {
setIsSuccessful(false);
toast({
type: "error",
description: "提交的信息校验失败",
});
} else if (state.status === "success") {
toast({ type: "success", description: "账号创建成功" });
setIsSuccessful(true);
updateSession();
router.refresh();
redirectTimerRef.current = window.setTimeout(() => {
window.location.replace("/");
}, 300);
}
}, [state.status]);
useEffect(() => {
return () => {
if (redirectTimerRef.current) {
window.clearTimeout(redirectTimerRef.current);
}
};
}, []);
const handleSubmit = (formData: FormData) => {
setEmail(formData.get("email") as string);
formAction(formData);