From b11452e35c40f5b2bbacbf797ea6f8c3804266f4 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Fri, 20 Dec 2024 10:42:50 -0500 Subject: [PATCH] shared session check --- src/lib/server/auth/index.ts | 22 ++++++++++++++++++++++ src/routes/+page.server.ts | 24 ++++++++---------------- src/routes/app/+layout.server.ts | 24 ++++-------------------- 3 files changed, 34 insertions(+), 36 deletions(-) create mode 100644 src/lib/server/auth/index.ts diff --git a/src/lib/server/auth/index.ts b/src/lib/server/auth/index.ts new file mode 100644 index 0000000..3bbc2cc --- /dev/null +++ b/src/lib/server/auth/index.ts @@ -0,0 +1,22 @@ +import { redirect, type ServerLoadEvent } from '@sveltejs/kit'; +import dayjs from 'dayjs'; +import { prisma } from '../prisma'; + +export async function validateSession(event: ServerLoadEvent) { + const sessionId = event.cookies.get('auth_session'); + if (!sessionId) { + redirect(300, '/login'); + } + const session = await prisma.session.findUnique({ + where: { id: sessionId }, + include: { user: true }, + }); + if (!session) { + redirect(300, '/login'); + } + const expiry = session.expiresAt; + if (dayjs(expiry).isBefore(dayjs())) { + redirect(300, '/login'); + } + return session; +} \ No newline at end of file diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 8ff2993..8b2f3fd 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,18 +1,10 @@ -import { prisma } from '$lib/server/prisma'; -import { redirect } from '@sveltejs/kit'; +import { validateSession } from '$lib/server/auth/index.js'; export async function load(event) { - const sessionId = event.cookies.get('auth_session'); - if (!sessionId) { - redirect(303, '/login'); - } - const user = await prisma.session.findUnique({ - where: { - id: sessionId, - }, - }); - if (!user) { - redirect(300, '/login'); - } - return {}; -} + const { + user: { password: _, ...rest }, + } = await validateSession(event); + return { + user: rest, + }; +} \ No newline at end of file diff --git a/src/routes/app/+layout.server.ts b/src/routes/app/+layout.server.ts index dfefb8f..8b2f3fd 100644 --- a/src/routes/app/+layout.server.ts +++ b/src/routes/app/+layout.server.ts @@ -1,25 +1,9 @@ -import { prisma } from '$lib/server/prisma'; -import { redirect } from '@sveltejs/kit'; -import dayjs from 'dayjs'; +import { validateSession } from '$lib/server/auth/index.js'; export async function load(event) { - const sessionId = event.cookies.get('auth_session'); - if (!sessionId) { - redirect(300, '/login'); - } - const session = await prisma.session.findUnique({ - where: { id: sessionId }, - include: { user: true }, - }); - if (!session) { - redirect(300, '/login'); - } - const expiry = session.expiresAt; - if (dayjs(expiry).isBefore(dayjs())) { - redirect(300, '/login'); - } - - const { password: _, ...rest } = session.user; + const { + user: { password: _, ...rest }, + } = await validateSession(event); return { user: rest, };