diff --git a/src/app/verify/page.tsx b/src/app/verify/page.tsx new file mode 100644 index 0000000..4d63ff3 --- /dev/null +++ b/src/app/verify/page.tsx @@ -0,0 +1,74 @@ +"use client"; + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { useRouter } from "next/navigation"; +import { useEffect, useState } from "react"; +import { toast } from "sonner"; +import Cookies from "js-cookie"; +import axios from "axios"; + +export default function Verify() { + const [email, setEmail] = useState(); + const router = useRouter(); + const [verified, setVerified] = useState(false); + + useEffect(() => { + const email = Cookies.get("verify_temp_email"); + setEmail(email); + const password = Cookies.get("verify_temp_password"); + + const i = setInterval(async () => { + const { data } = await axios.get("/api/verify", { + params: { email, password }, + }); + const response = data as { + verified: boolean; + user_id: string; + access_token?: string; + refresh_token?: string; + }; + if (response.verified) { + clearInterval(i); + if (response.access_token) { + setVerified(true); + toast.info("Email verified, redirecting..."); + Cookies.set("token", response.access_token); + Cookies.remove("verify_temp_email"); + Cookies.remove("verify_temp_password"); + setTimeout(() => router.push("/chat"), 500); + } else { + console.log(response); + } + } + }, 8000); + }, []); + + return ( +
+ + + Verify Email + + {verified ? ( + "Successfully verified" + ) : ( + <> + We sent you a verification email at {email}. Please verify to + continue. + + )} + + + + Current status: {verified ? "Verified" : "Unverified"} + + +
+ ); +} diff --git a/src/components/auth/CreateAccount.tsx b/src/components/auth/CreateAccount.tsx index 7a0e77d..2552658 100644 --- a/src/components/auth/CreateAccount.tsx +++ b/src/components/auth/CreateAccount.tsx @@ -3,13 +3,13 @@ import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import axios from "axios"; -import { useEffect, useState } from "react"; -import Cookies from "js-cookie"; -import { useRouter } from "next/navigation"; +import { useState } from "react"; import Link from "next/link"; import { CardContent, CardHeader, CardTitle } from "../ui/card"; import { Label } from "../ui/label"; import { toast } from "sonner"; +import { useRouter } from "next/navigation"; +import Cookies from "js-cookie"; export default function CreateAccount() { const [username, setUsername] = useState(""); @@ -21,40 +21,8 @@ export default function CreateAccount() { const [feedback, setFeedback] = useState< undefined | { kind: "error" | "info"; message: string } >(); - const [verify, setVerify] = useState(); - const router = useRouter(); - // Verify interval - useEffect(() => { - if (verify) { - const i = setInterval(async () => { - const { data } = await axios.get("/api/verify", { - params: { email, password }, - }); - const response = data as { - verified: boolean; - user_id: string; - access_token?: string; - refresh_token?: string; - }; - if (response.verified) { - clearInterval(i); - setFeedback({ - message: "Email verified, redirecting...", - kind: "info", - }); - if (response.access_token) { - Cookies.set("token", response.access_token); - setTimeout(() => router.push("/chat"), 500); - } else { - console.log(response); - } - } - }, 8000); - } - }, [verify]); - const validateInput = (): | { kind: "error" | "info"; message: string } | undefined => { @@ -113,8 +81,14 @@ export default function CreateAccount() { toast.info( "We sent you a verification email. Please verify to continue." ); - setFeedback(undefined); - setVerify(response.user_id); + setFeedback({ + message: + "We sent you a verification email. Please verify to continue.", + kind: "info", + }); + Cookies.set("verify_temp_email", email); + Cookies.set("verify_temp_password", password); + router.push(`/verify`); } else { setFeedback({ message: response.message, kind: "error" }); } @@ -133,77 +107,69 @@ export default function CreateAccount() { return ( <> - - {verify ? "Verify" : "Create an Account"} - + Create an Account - {verify ? ( - `We sent you a verification email at (${email}). Please verify to continue.` - ) : ( - <> - - Email - setEmail(e.target.value)} - placeholder="john@example.com" - type="email" - /> - - - Username - setUsername(e.target.value)} - placeholder="john_doe" - /> - - - Password - setPassword(e.target.value)} - type="password" - /> - - - Confirm Password - setConfirmPassword(e.target.value)} - onKeyDown={(e) => { - if (e.key === "Enter") signup(); - }} - type="password" - /> - + + Email + setEmail(e.target.value)} + placeholder="john@example.com" + type="email" + /> + + + Username + setUsername(e.target.value)} + placeholder="john_doe" + /> + + + Password + setPassword(e.target.value)} + type="password" + /> + + + Confirm Password + setConfirmPassword(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") signup(); + }} + type="password" + /> + - + - {feedback && ( -
- {feedback.message} -
- )} - - - + {feedback && ( +
+ {feedback.message} +
)} + +
);