diff --git a/README.md b/README.md index 12dc995..8a55a7e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ | 一键部署到 Vercel-推荐 | Docker部署 | Cloudflare部署 | 如何更新? | | ----------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------- | | [部署简易教程](https://buycoffee.top/blog/tech/nezha) | [Docker 部署教程](https://buycoffee.top/blog/tech/nezha-docker) | [Cloudflare 部署教程](https://buycoffee.top/blog/tech/nezha-cloudflare) | [更新教程](https://buycoffee.top/blog/tech/nezha-upgrade) | -| [Vercel-demo](https://nezha-vercel.buycoffee.top) | [Docker-demo](https://nezha-docker.buycoffee.tech) | [Cloudflare-demo](https://nezha-cloudflare.buycoffee.tech) | +| [Vercel-demo](https://nezha-vercel.buycoffee.top) | [Docker-demo](https://nezha-docker.buycoffee.tech) | [Cloudflare-demo](https://nezha-cloudflare.buycoffee.tech) [密码: nezhadash] | #### 环境变量 diff --git a/components/SignIn.tsx b/components/SignIn.tsx index 31e6913..d0bea0b 100644 --- a/components/SignIn.tsx +++ b/components/SignIn.tsx @@ -1,8 +1,8 @@ "use client"; -import { getCsrfToken, signIn } from "next-auth/react"; +import { getCsrfToken } from "next-auth/react"; import { useTranslations } from "next-intl"; -import { useRouter, useSearchParams } from "next/navigation"; +import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { Loader } from "./loading/Loader"; @@ -11,20 +11,11 @@ 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 [errorState, setErrorState] = 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(); @@ -37,20 +28,32 @@ export function SignIn() { e.preventDefault(); setLoading(true); const formData = new FormData(e.currentTarget); - const password = formData.get("password"); - const res = await signIn("credentials", { - password, - redirect: false, + + + // 直接构建 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?.error) { - setErrorState(true); + + if (res.url.includes("error")) { + setLoading(false) + setErrorState(true) } else { - setErrorState(false); - setSuccessState(true); - router.push("/"); - router.refresh(); + setLoading(false) + setErrorState(false) } - setLoading(false); + router.push("/"); + router.refresh(); }; return ( @@ -66,11 +69,6 @@ export function SignIn() { {t("ErrorMessage")}
)} - {successState && ( -- {t("SuccessMessage")} -
- )}{t("SignInMessage")}