"use client"; import { getCsrfToken } from "next-auth/react"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { Loader } from "./loading/Loader"; export function SignIn() { const t = useTranslations("SignIn"); const [csrfToken, setCsrfToken] = useState(""); const [loading, setLoading] = useState(false); const [errorState, setErrorState] = useState(false); const router = useRouter(); useEffect(() => { async function loadProviders() { const csrf = await getCsrfToken(); setCsrfToken(csrf); } loadProviders(); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); const formData = new FormData(e.currentTarget); // 直接构建 URL 编码的字符串 const urlEncodedData = [ `csrfToken=${encodeURIComponent(csrfToken)}`, `redirect=false`, `password=${encodeURIComponent(formData.get('password') as string)}`, ].join('&'); const res = await fetch("/api/auth/callback/credentials", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: urlEncodedData, }); if (res.url.includes("error")) { setLoading(false) setErrorState(true) } else { setLoading(false) setErrorState(false) } router.push("/"); router.refresh(); }; return (
); }