Explorar o código

add redirect support to signup and verify email

Milo Schwartz hai 10 meses
pai
achega
f14fb90ab6

+ 6 - 2
src/app/auth/signup/page.tsx

@@ -2,7 +2,11 @@ import SignupForm from "@app/components/auth/SignupForm";
 import { verifySession } from "@app/lib/auth/verifySession";
 import { verifySession } from "@app/lib/auth/verifySession";
 import { redirect } from "next/navigation";
 import { redirect } from "next/navigation";
 
 
-export default async function Page() {
+export default async function Page({
+    searchParams,
+}: {
+    searchParams: { [key: string]: string | string[] | undefined };
+}) {
     const user = await verifySession();
     const user = await verifySession();
 
 
     if (user) {
     if (user) {
@@ -11,7 +15,7 @@ export default async function Page() {
 
 
     return (
     return (
         <>
         <>
-            <SignupForm />
+            <SignupForm redirect={searchParams.redirect as string} />
         </>
         </>
     );
     );
 }
 }

+ 9 - 4
src/app/auth/verify-email/page.tsx

@@ -2,7 +2,11 @@ import VerifyEmailForm from "@app/components/auth/VerifyEmailForm";
 import { verifySession } from "@app/lib/auth/verifySession";
 import { verifySession } from "@app/lib/auth/verifySession";
 import { redirect } from "next/navigation";
 import { redirect } from "next/navigation";
 
 
-export default async function Page() {
+export default async function Page({
+    searchParams,
+}: {
+    searchParams: { [key: string]: string | string[] | undefined };
+}) {
     const user = await verifySession();
     const user = await verifySession();
 
 
     if (!user) {
     if (!user) {
@@ -13,11 +17,12 @@ export default async function Page() {
         redirect("/");
         redirect("/");
     }
     }
 
 
-    console.log(user.email)
-
     return (
     return (
         <>
         <>
-            <VerifyEmailForm email={user.email}/>
+            <VerifyEmailForm
+                email={user.email}
+                redirect={searchParams.redirect as string}
+            />
         </>
         </>
     );
     );
 }
 }

+ 8 - 2
src/components/auth/LoginForm.tsx

@@ -70,12 +70,18 @@ export default function LoginForm({ redirect }: LoginFormProps) {
             setError(null);
             setError(null);
 
 
             if (res.data?.data?.emailVerificationRequired) {
             if (res.data?.data?.emailVerificationRequired) {
-                router.push("/auth/verify-email");
+                if (redirect) {
+                    router.push(`/auth/verify-email?redirect=${redirect}`);
+                } else {
+                    router.push("/auth/verify-email");
+                }
                 return;
                 return;
             }
             }
 
 
-            if (redirect && typeof redirect === "string") {
+            if (redirect && redirect.includes("http")) {
                 window.location.href = redirect;
                 window.location.href = redirect;
+            } else if (redirect) {
+                router.push(redirect);
             } else {
             } else {
                 router.push("/");
                 router.push("/");
             }
             }

+ 11 - 5
src/components/auth/SignupForm.tsx

@@ -75,16 +75,22 @@ export default function SignupForm({ redirect }: SignupFormProps) {
         if (res && res.status === 200) {
         if (res && res.status === 200) {
             setError(null);
             setError(null);
 
 
-            if (res.data.data.emailVerificationRequired) {
-                router.push("/auth/verify-email");
+            if (res.data?.data?.emailVerificationRequired) {
+                if (redirect) {
+                    router.push(`/auth/verify-email?redirect=${redirect}`);
+                } else {
+                    router.push("/auth/verify-email");
+                }
                 return;
                 return;
             }
             }
 
 
-            if (redirect && typeof redirect === "string") {
+            if (redirect && redirect.includes("http")) {
                 window.location.href = redirect;
                 window.location.href = redirect;
+            } else if (redirect) {
+                router.push(redirect);
+            } else {
+                router.push("/");
             }
             }
-
-            router.push("/");
         }
         }
     }
     }
 
 

+ 13 - 2
src/components/auth/VerifyEmailForm.tsx

@@ -44,9 +44,13 @@ const FormSchema = z.object({
 
 
 export type VerifyEmailFormProps = {
 export type VerifyEmailFormProps = {
     email: string;
     email: string;
+    redirect?: string;
 };
 };
 
 
-export default function VerifyEmailForm({ email }: VerifyEmailFormProps) {
+export default function VerifyEmailForm({
+    email,
+    redirect,
+}: VerifyEmailFormProps) {
     const router = useRouter();
     const router = useRouter();
 
 
     const [error, setError] = useState<string | null>(null);
     const [error, setError] = useState<string | null>(null);
@@ -82,7 +86,14 @@ export default function VerifyEmailForm({ email }: VerifyEmailFormProps) {
                 "Email successfully verified! Redirecting you...",
                 "Email successfully verified! Redirecting you...",
             );
             );
             setTimeout(() => {
             setTimeout(() => {
-                router.push("/");
+                if (redirect && redirect.includes("http")) {
+                    window.location.href = redirect;
+                }
+                if (redirect) {
+                    router.push(redirect);
+                } else {
+                    router.push("/");
+                }
                 setIsSubmitting(false);
                 setIsSubmitting(false);
             }, 3000);
             }, 3000);
         }
         }