From 6a436d09db9c9bb6ed29a7468f598032d034d325 Mon Sep 17 00:00:00 2001 From: msabhii Date: Wed, 8 Jan 2025 05:59:01 +0530 Subject: [PATCH] Procted routes --- apps/X/app/favicon.ico | Bin 0 -> 176468 bytes apps/X/app/home/page.tsx | 7 ++++- apps/X/app/icon.svg | 6 ---- apps/X/app/layout.tsx | 9 +++--- apps/X/app/lib/auth.ts | 26 +++++++++++----- apps/X/app/page.tsx | 11 +++---- apps/X/app/provider.tsx | 2 +- apps/X/src/components/RouteGuard.tsx | 38 +++++++++++++++++++++++ apps/X/src/components/home/HomeLeft.tsx | 1 + apps/X/src/components/home/HomeRight.tsx | 1 + apps/X/src/components/ui/X_logo.tsx | 2 +- apps/X/src/components/ui/index.ts | 4 +-- 12 files changed, 78 insertions(+), 29 deletions(-) create mode 100644 apps/X/app/favicon.ico delete mode 100644 apps/X/app/icon.svg create mode 100644 apps/X/src/components/RouteGuard.tsx diff --git a/apps/X/app/favicon.ico b/apps/X/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2dfdd302f7d607d08edb1280ffce9a57042c9a86 GIT binary patch literal 176468 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 literal 0 HcmV?d00001 diff --git a/apps/X/app/home/page.tsx b/apps/X/app/home/page.tsx index bdb58f7..c0d1a0f 100644 --- a/apps/X/app/home/page.tsx +++ b/apps/X/app/home/page.tsx @@ -1,6 +1,11 @@ -import { CenterComp, HomeLeft, HomeRight } from "@/components/ui"; +"use client"; +import { HomeRight, Button, CenterComp, HomeLeft } from "@/components/ui"; +import { signOut } from "next-auth/react"; const homepage = () => { + const handleLogout = async () => { + await signOut({ callbackUrl: "/" }); + }; return (
diff --git a/apps/X/app/icon.svg b/apps/X/app/icon.svg deleted file mode 100644 index bff9881..0000000 --- a/apps/X/app/icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/apps/X/app/layout.tsx b/apps/X/app/layout.tsx index 28ea232..9ef1e65 100644 --- a/apps/X/app/layout.tsx +++ b/apps/X/app/layout.tsx @@ -1,7 +1,8 @@ import type { Metadata } from "next"; import localFont from "next/font/local"; import "./globals.css"; -import { Provieder } from "./provider"; +import { Provider } from "./provider"; +import { RouteGard } from "@/components/RouteGuard"; const geistSans = localFont({ src: "./fonts/GeistVF.woff", @@ -24,11 +25,11 @@ export default function RootLayout({ }>) { return ( - + - {children} + {children} - + ); } diff --git a/apps/X/app/lib/auth.ts b/apps/X/app/lib/auth.ts index d41c137..1c1acf6 100644 --- a/apps/X/app/lib/auth.ts +++ b/apps/X/app/lib/auth.ts @@ -4,6 +4,7 @@ import { JWT } from "next-auth/jwt"; import CredentialsProvider from "next-auth/providers/credentials"; import GithubProvider from "next-auth/providers/github"; import GoogleProvider from "next-auth/providers/google"; +import { signOut } from "next-auth/react"; import z from "zod"; interface credentialsTypes { @@ -15,8 +16,8 @@ interface credentialsTypes { const userInput = z.object({ username: z.string(), - name: z.string(), - email: z.string().email(), + name: z.string().optional(), + email: z.string().email().optional(), password: z.string(), }); @@ -52,7 +53,11 @@ export const authOptions = { name: creds.name, }); }; - + const validationResult = validatedUserInput(credentials); + if (!validationResult.success) { + console.log("Validation failed", validationResult.error); + return null; + } if (!validatedUserInput) return null; const hashedPassword = await bcrypt.hash(credentials.password, 10); @@ -70,7 +75,6 @@ export const authOptions = { credentials.password, existingUser.password ); - console.log("This is the password", passwordValidation); if (passwordValidation) { console.log("This is userEmail", existingUser.email); console.log("This is username", existingUser.username); @@ -80,8 +84,9 @@ export const authOptions = { email: existingUser.email, name: existingUser.name, }; + } else { + console.log("Invalid password for existing user"); } - console.log("This is name", existingUser.name); } catch (error) { console.log("Error while LogIn", error); @@ -119,6 +124,8 @@ export const authOptions = { async jwt({ token, user }: any) { if (user) { token.id = user.id; + token.username = user.username; + token.email = user.email; } return token; }, @@ -127,14 +134,17 @@ export const authOptions = { // where: { id: token.sub }, // }); - if (token) { - session.user.id = token.sub; + if (token && session.user) { + session.user.id = token.id || null; + session.user.username = token.username || null; + session.user.email = token.email || null; } - return session; }, }, pages: { signIn: "/signin", + error: "/error", + signOut: "/signin", }, }; diff --git a/apps/X/app/page.tsx b/apps/X/app/page.tsx index 6c256a4..b678fa6 100644 --- a/apps/X/app/page.tsx +++ b/apps/X/app/page.tsx @@ -4,15 +4,14 @@ import { redirect } from "next/navigation"; const Page = async () => { const session = await getServerSession(authOptions); + console.log(session, "This is the session log"); - if (!session) { - console.log("No session,redirecting to SIGNIN"); + if (!session?.user?.id) { + console.log("No valid session, redirecting to signin"); redirect("/signin"); } - if (session.user && session.user.id) { - redirect("/home"); - } - return
Loading......
; + console.log("Valid session detected, redirecting to /home"); + redirect("/home"); }; export default Page; diff --git a/apps/X/app/provider.tsx b/apps/X/app/provider.tsx index 9ace421..4d564ee 100644 --- a/apps/X/app/provider.tsx +++ b/apps/X/app/provider.tsx @@ -1,6 +1,6 @@ "use client"; import { SessionProvider } from "next-auth/react"; -export const Provieder = ({ children }: { children: React.ReactNode }) => { +export const Provider = ({ children }: { children: React.ReactNode }) => { return {children}; }; diff --git a/apps/X/src/components/RouteGuard.tsx b/apps/X/src/components/RouteGuard.tsx new file mode 100644 index 0000000..6666248 --- /dev/null +++ b/apps/X/src/components/RouteGuard.tsx @@ -0,0 +1,38 @@ +"use client"; +import { useSession } from "next-auth/react"; +import { usePathname, useRouter } from "next/navigation"; +import { useEffect } from "react"; + +const publicPaths = ["/signin", "/login", "/error"]; + +export function RouteGard({ children }: { children: React.ReactNode }) { + const { data: session, status } = useSession(); + const router = useRouter(); + const pathname = usePathname(); + useEffect(() => { + if (status == "loading") { + return; + } + if (!session && !publicPaths.includes(pathname)) { + router.push("/signin"); + } + }, [session, status, router, pathname]); + + if (status == "loading") { + return ( +
+ +
+ ); + } + + return <>{children}; +} diff --git a/apps/X/src/components/home/HomeLeft.tsx b/apps/X/src/components/home/HomeLeft.tsx index e00b839..19a7732 100644 --- a/apps/X/src/components/home/HomeLeft.tsx +++ b/apps/X/src/components/home/HomeLeft.tsx @@ -1,3 +1,4 @@ +"use client" export const HomeLeft = () => { return
Home Left
; }; diff --git a/apps/X/src/components/home/HomeRight.tsx b/apps/X/src/components/home/HomeRight.tsx index 734edaa..98547d2 100644 --- a/apps/X/src/components/home/HomeRight.tsx +++ b/apps/X/src/components/home/HomeRight.tsx @@ -1,3 +1,4 @@ +"use client" export const HomeRight = () => { return
Home Right Side
; }; diff --git a/apps/X/src/components/ui/X_logo.tsx b/apps/X/src/components/ui/X_logo.tsx index 7fcfeb7..0914049 100644 --- a/apps/X/src/components/ui/X_logo.tsx +++ b/apps/X/src/components/ui/X_logo.tsx @@ -5,7 +5,7 @@ export const X_logo = () => {