"use client"; import { getCsrfToken, signIn } from "next-auth/react"; import { useTranslations } from "next-intl"; import { useRouter, useSearchParams } from "next/navigation"; import { useEffect, useState } from "react"; import { Loader } from "./loading/Loader"; import { auth } from "@/auth"; export function SignIn() { const t = useTranslations("SignIn"); const [csrfToken, setCsrfToken] = useState(""); const [errorState, setErrorState] = useState(false); const [loading, setLoading] = useState(false); const [successState, setSuccessState] = useState(false); const search = useSearchParams(); const error = search.get("error"); const router = useRouter(); useEffect(() => { if (error) { setErrorState(true); } }, [error]); 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('&'); await fetch("/api/auth/callback/credentials", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: urlEncodedData, }); const session = await auth(); if (session) { setSuccessState(true); } else { setErrorState(true); } setLoading(false) router.push("/"); router.refresh(); }; return (
); }