From 9d4c3cbdd90c3db96b73cab1eaa7ff90c826a312 Mon Sep 17 00:00:00 2001 From: Sonny Date: Sun, 4 Jun 2023 23:54:51 +0200 Subject: [PATCH] fix: redirect user if not logged in --- src/lib/api/handler.ts | 4 ++-- src/lib/category/getUserCategories.ts | 3 +++ src/lib/user/getUser.ts | 3 +++ src/pages/category/create.tsx | 7 +++++++ src/pages/category/edit/[cid].tsx | 7 +++++++ src/pages/category/remove/[cid].tsx | 7 +++++++ src/pages/index.tsx | 10 +++++++++- src/pages/link/create.tsx | 7 +++++++ src/pages/link/edit/[lid].tsx | 17 ++++++++++++----- src/pages/link/remove/[lid].tsx | 7 +++++++ src/pages/signin.tsx | 4 +++- src/utils/session.ts | 13 ------------- 12 files changed, 67 insertions(+), 22 deletions(-) diff --git a/src/lib/api/handler.ts b/src/lib/api/handler.ts index 18d60ae..ff1cda0 100644 --- a/src/lib/api/handler.ts +++ b/src/lib/api/handler.ts @@ -4,7 +4,7 @@ import { NextApiRequest, NextApiResponse } from "next"; import { Session } from "next-auth"; import getUserOrThrow from "lib/user/getUserOrThrow"; -import { getSessionOrThrow } from "utils/session"; +import { getSession } from "utils/session"; type ApiHandlerMethod = ({ req, @@ -36,7 +36,7 @@ export function apiHandler(handler: { .json({ error: `Method ${req.method} Not Allowed` }); try { - const session = await getSessionOrThrow(req, res); + const session = await getSession(req, res); const user = await getUserOrThrow(session); await handler[method]({ req, res, session, user }); diff --git a/src/lib/category/getUserCategories.ts b/src/lib/category/getUserCategories.ts index 6cbeeb5..dee2ac9 100644 --- a/src/lib/category/getUserCategories.ts +++ b/src/lib/category/getUserCategories.ts @@ -11,6 +11,9 @@ export default async function getUserCategories(user: User) { where: { authorId: user?.id, }, + include: { + category: true, + }, }, }, }); diff --git a/src/lib/user/getUser.ts b/src/lib/user/getUser.ts index 695a3ea..016c293 100644 --- a/src/lib/user/getUser.ts +++ b/src/lib/user/getUser.ts @@ -2,6 +2,9 @@ import { Session } from "next-auth"; import prisma from "utils/prisma"; export default async function getUser(session: Session) { + if (!session?.user) { + return null; + } return await prisma.user.findFirst({ where: { email: session?.user?.email, diff --git a/src/pages/category/create.tsx b/src/pages/category/create.tsx index 01cab7d..a46538e 100644 --- a/src/pages/category/create.tsx +++ b/src/pages/category/create.tsx @@ -81,6 +81,13 @@ export default CreateCategory; export async function getServerSideProps({ req, res }) { const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } const categoriesCount = await getUserCategoriesCount(user); return { diff --git a/src/pages/category/edit/[cid].tsx b/src/pages/category/edit/[cid].tsx index d6357ad..72f8675 100644 --- a/src/pages/category/edit/[cid].tsx +++ b/src/pages/category/edit/[cid].tsx @@ -81,6 +81,13 @@ export async function getServerSideProps({ req, res, query }) { const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } const category = await getUserCategory(user, Number(cid)); if (!category) { diff --git a/src/pages/category/remove/[cid].tsx b/src/pages/category/remove/[cid].tsx index 8edd906..b57e5fb 100644 --- a/src/pages/category/remove/[cid].tsx +++ b/src/pages/category/remove/[cid].tsx @@ -88,6 +88,13 @@ export async function getServerSideProps({ req, res, query }) { const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } const category = await getUserCategory(user, Number(cid)); if (!category) { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 490568d..a9df197 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -187,10 +187,18 @@ function Home(props: HomePageProps) { } export async function getServerSideProps({ req, res, query }) { - const session = await getSession(req, res); const queryCategoryId = (query?.categoryId as string) || ""; + const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.LOGIN, + }, + }; + } + const categories = await getUserCategories(user); if (categories.length === 0) { return { diff --git a/src/pages/link/create.tsx b/src/pages/link/create.tsx index 71e73ca..468eb42 100644 --- a/src/pages/link/create.tsx +++ b/src/pages/link/create.tsx @@ -116,6 +116,13 @@ export default CreateLink; export async function getServerSideProps({ req, res }) { const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } const categories = await getUserCategories(user); if (categories.length === 0) { diff --git a/src/pages/link/edit/[lid].tsx b/src/pages/link/edit/[lid].tsx index f7bd793..883d55d 100644 --- a/src/pages/link/edit/[lid].tsx +++ b/src/pages/link/edit/[lid].tsx @@ -12,13 +12,13 @@ import TextBox from "components/TextBox"; import useAutoFocus from "hooks/useAutoFocus"; import { Category, Link } from "types"; import { HandleAxiosError, IsValidURL } from "utils/front"; -import { getSessionOrThrow } from "utils/session"; +import { getSession } from "utils/session"; import getUserCategories from "lib/category/getUserCategories"; import getUserLink from "lib/link/getUserLink"; -import getUserOrThrow from "lib/user/getUserOrThrow"; import PATHS from "constants/paths"; +import getUser from "lib/user/getUser"; import styles from "styles/create.module.scss"; function EditLink({ @@ -136,10 +136,17 @@ export default EditLink; export async function getServerSideProps({ req, res, query }) { const { lid } = query; - const session = await getSessionOrThrow(req, res); - const user = await getUserOrThrow(session); - const categories = await getUserCategories(user); + const session = await getSession(req, res); + const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } + const categories = await getUserCategories(user); const link = await getUserLink(user, Number(lid)); if (!link) { return { diff --git a/src/pages/link/remove/[lid].tsx b/src/pages/link/remove/[lid].tsx index e4d2495..6d02a51 100644 --- a/src/pages/link/remove/[lid].tsx +++ b/src/pages/link/remove/[lid].tsx @@ -102,6 +102,13 @@ export async function getServerSideProps({ req, res, query }) { const session = await getSession(req, res); const user = await getUser(session); + if (!user) { + return { + redirect: { + destination: PATHS.HOME, + }, + }; + } const link = await getUserLink(user, Number(lid)); if (!link) { diff --git a/src/pages/signin.tsx b/src/pages/signin.tsx index 44e3aef..d5c943e 100644 --- a/src/pages/signin.tsx +++ b/src/pages/signin.tsx @@ -7,6 +7,7 @@ import MessageManager from "components/MessageManager/MessageManager"; import PATHS from "constants/paths"; import { getSession } from "utils/session"; +import getUser from "lib/user/getUser"; import styles from "styles/login.module.scss"; interface SignInProps { @@ -39,7 +40,8 @@ export default function SignIn({ providers }: SignInProps) { export async function getServerSideProps({ req, res }) { const session = await getSession(req, res); - if (session) { + const user = await getUser(session); + if (user) { return { redirect: { destination: PATHS.HOME, diff --git a/src/utils/session.ts b/src/utils/session.ts index ba428d7..5dfe47c 100644 --- a/src/utils/session.ts +++ b/src/utils/session.ts @@ -6,16 +6,3 @@ import { authOptions } from "pages/api/auth/[...nextauth]"; export async function getSession(req: NextApiRequest, res: NextApiResponse) { return await getServerSession(req, res, authOptions); } - -export async function getSessionOrThrow( - req: NextApiRequest, - res: NextApiResponse -) { - const session = await getSession(req, res); - - if (!session) { - throw new Error("You must be connected"); - } - - return session; -}