From 0e770425533c6629f20c552d3c78f6358a78014d Mon Sep 17 00:00:00 2001 From: Rainnny7 Date: Tue, 17 Sep 2024 17:15:45 -0400 Subject: [PATCH] change how the auth page looks and reset the captcha during auth failures --- bun.lockb | Bin 168563 -> 168936 bytes package.json | 7 +++-- src/components/auth/auth-form.tsx | 46 +++++++++++++++++++----------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/bun.lockb b/bun.lockb index 5cc6e5e82a81d33e96613555dbfe6915ec36a634..35c001738b347176eef2381037bc4304265b737d 100644 GIT binary patch delta 28710 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�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 delta 28529 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 diff --git a/package.json b/package.json index 5de44ae..1667f7a 100644 --- a/package.json +++ b/package.json @@ -38,13 +38,14 @@ "zustand": "^5.0.0-rc.2" }, "devDependencies": { - "typescript": "^5", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.2.8", "postcss": "^8", "tailwindcss": "^3.4.1", - "eslint": "^8", - "eslint-config-next": "14.2.8" + "turnstile-types": "^1.2.2", + "typescript": "^5" } } diff --git a/src/components/auth/auth-form.tsx b/src/components/auth/auth-form.tsx index 59d3580..1d458fc 100644 --- a/src/components/auth/auth-form.tsx +++ b/src/components/auth/auth-form.tsx @@ -19,30 +19,29 @@ import { Cookies, useCookies } from "next-client-cookies"; import { useRouter } from "next/navigation"; import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; import { motion } from "framer-motion"; -import Turnstile from "react-turnstile"; +import Turnstile, { useTurnstile } from "react-turnstile"; +import { TurnstileObject } from "turnstile-types"; /** * Define the form schemas for the various stages. */ const EmailSchema = z.object({ - email: z.string().email("Must be a valid email address"), + email: z.string().email("Must be a valid email address."), }); const RegisterSchema = z.object({ - email: z.string().email("Must be a valid email address"), + email: z.string().email("Must be a valid email address."), username: z.string(), password: z.string(), passwordConfirmation: z.string(), - // captchaResponse: z.string(), }); const LoginSchema = z.object({ email: z.union([ - z.string().email("Must be a valid email address"), - z.string({ message: "Must be a valid username" }), + z.string().email("Must be a valid email address."), + z.string({ message: "Must be a valid username." }), ]), password: z.string(), - // captchaResponse: z.string(), }); /** @@ -65,6 +64,7 @@ const AuthForm = (): ReactElement => { undefined ); const [error, setError] = useState(undefined); + const turnstile: TurnstileObject = useTurnstile(); const cookies: Cookies = useCookies(); const router: AppRouterInstance = useRouter(); @@ -118,7 +118,12 @@ const AuthForm = (): ReactElement => { }, }); setError(error?.message ?? undefined); - if (!error) { + + // Reset the captcha if auth fails + if (error) { + turnstile.reset(); + } else { + // Otherwise store the session and redirect to the dashboard cookies.set("session", JSON.stringify(data), { expires: ((data?.expires as number) - Date.now()) / 86_400_000, @@ -212,21 +217,30 @@ const AuthForm = (): ReactElement => { onVerify={(token: string) => setCaptchaResponse(token)} /> - {/* Errors */} - {error &&

{error}

} + {/* Display the global error if it exists, otherwise show the first field error */} +

+ {error + ? error + : Object.values(errors).find((err: any) => err?.message) && + Object.values(errors) + .find((err: any) => err?.message) + ?.message?.toString()} +

{/* Submit Form */}