From 4bcb62c67c4b8f64241bf636bac9a6e583b1ed66 Mon Sep 17 00:00:00 2001 From: RobVermeer Date: Fri, 29 Dec 2023 18:15:40 +0100 Subject: [PATCH] Add login page and redirect when not logged in --- src/app/layout.tsx | 9 ++------- src/app/login/page.tsx | 14 ++++++++++++++ src/app/page.tsx | 7 +++++++ src/app/profile/page.tsx | 12 ++++++++---- src/app/project/[projectId]/page.tsx | 7 +++++++ src/components/Header/index.tsx | 9 ++++----- src/components/{Login => LoginForm}/index.tsx | 4 ++-- 7 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 src/app/login/page.tsx rename src/components/{Login => LoginForm}/index.tsx (75%) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 5b636ae..3125cfe 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,10 +1,7 @@ import type { Metadata } from "next" import { Ubuntu } from "next/font/google" import "./globals.css" -import { getServerSession } from "next-auth" -import { authOptions } from "@/lib/nextAuth" import { Header } from "@/components/Header" -import { Login } from "@/components/Login" import { Toaster } from "@/components/ui/toaster" const ubuntu = Ubuntu({ weight: ["400"], subsets: ["latin"] }) @@ -20,13 +17,11 @@ interface Props { } export default async function RootLayout({ children }: Props) { - const session = await getServerSession(authOptions) - return ( -
- {session ? children : } +
+ {children} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..acdff59 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,14 @@ +import { redirect } from "next/navigation" +import { getServerSession } from "next-auth" +import { authOptions } from "@/lib/nextAuth" +import { LoginForm } from "@/components/LoginForm" + +export default async function Login() { + const session = await getServerSession(authOptions) + + if (session) { + redirect("/") + } + + return +} diff --git a/src/app/page.tsx b/src/app/page.tsx index 1b2cbe0..970cde8 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,11 +1,18 @@ import { EmptyState } from "@/components/EmptyState" import { Issues } from "@/components/Issues" import { ProjectSelect } from "@/components/ProjectSelect" +import { authOptions } from "@/lib/nextAuth" import { getProjectsForUser } from "@/lib/project" import { ServerCog } from "lucide-react" +import { getServerSession } from "next-auth" import Link from "next/link" +import { redirect } from "next/navigation" export default async function Home() { + const session = await getServerSession(authOptions) + + if (!session) redirect("/login") + const projects = await getProjectsForUser() return ( diff --git a/src/app/profile/page.tsx b/src/app/profile/page.tsx index 0b34845..9b2580b 100644 --- a/src/app/profile/page.tsx +++ b/src/app/profile/page.tsx @@ -1,13 +1,17 @@ import { EditProject } from "@/components/EditProject" import { EmptyState } from "@/components/EmptyState" -import { Issues } from "@/components/Issues" import { NewProject } from "@/components/NewProject" -import { ProjectSelect } from "@/components/ProjectSelect" +import { authOptions } from "@/lib/nextAuth" import { getProjectsForUser } from "@/lib/project" import { ServerCog } from "lucide-react" -import Link from "next/link" +import { getServerSession } from "next-auth" +import { redirect } from "next/navigation" + +export default async function Profile() { + const session = await getServerSession(authOptions) + + if (!session) redirect("/login") -export default async function Home() { const projects = await getProjectsForUser() return ( diff --git a/src/app/project/[projectId]/page.tsx b/src/app/project/[projectId]/page.tsx index 5bd6c4a..d6021e4 100644 --- a/src/app/project/[projectId]/page.tsx +++ b/src/app/project/[projectId]/page.tsx @@ -1,15 +1,22 @@ import { EmptyState } from "@/components/EmptyState" import { Issues } from "@/components/Issues" import { ProjectSelect } from "@/components/ProjectSelect" +import { authOptions } from "@/lib/nextAuth" import { getProjectsForUser } from "@/lib/project" import { ServerCog } from "lucide-react" +import { getServerSession } from "next-auth" import Link from "next/link" +import { redirect } from "next/navigation" interface Props { params: { projectId: string } } export default async function Project({ params }: Props) { + const session = await getServerSession(authOptions) + + if (!session) redirect("/login") + const projects = await getProjectsForUser() return ( diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx index 51a4520..4ad8c1f 100644 --- a/src/components/Header/index.tsx +++ b/src/components/Header/index.tsx @@ -1,12 +1,11 @@ -import { Session } from "next-auth" +import { getServerSession } from "next-auth" import { Logo } from "../Logo" import { Menu } from "./Menu" +import { authOptions } from "@/lib/nextAuth" -interface Props { - session: Session | null -} +export async function Header() { + const session = await getServerSession(authOptions) -export async function Header({ session }: Props) { return (
+