From c48f1e23a396de5a48b1563d8062385ad602e176 Mon Sep 17 00:00:00 2001 From: Fayorg Date: Mon, 18 Dec 2023 10:01:22 +0100 Subject: [PATCH] add: authentication WIP --- app/dashboard/page.tsx | 10 ++++--- app/play/page.tsx | 26 +++++++++--------- components/custom/testCard.tsx | 48 +++++++++++++++++----------------- lib/authenticate.ts | 12 +++++---- types/next-auth.d.ts | 4 +-- 5 files changed, 52 insertions(+), 48 deletions(-) diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 1ea4753..e0b56e6 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -1,17 +1,19 @@ import prisma from '@/lib/prisma'; import ActiveCard from './ActiveCard'; import { getAuthServerSession } from '@/lib/authenticate'; +import { red } from 'next/dist/lib/picocolors'; +import { redirect } from 'next/navigation'; export default async function Dashboard() { + const authSession = await getAuthServerSession(); + console.log(authSession); + if (!authSession || !authSession.user.isTeacher) return redirect('/'); + const tests = await prisma.test.findMany({ select: { isActive: true, isPassed: true, id: true, testOf: { select: { id: true, firstName: true, lastName: true, isTeacher: true } } } }); const activeTests = tests.filter((test) => test.isActive); const passedTests = tests.filter((test) => test.isPassed); - const authSession = await getAuthServerSession(); - - console.log(authSession); - return (

Dashboard

diff --git a/app/play/page.tsx b/app/play/page.tsx index 709cb7a..2c602aa 100644 --- a/app/play/page.tsx +++ b/app/play/page.tsx @@ -5,9 +5,9 @@ import { useRouter } from 'next/navigation'; import { useState, useEffect } from 'react'; import useSWR from 'swr'; import { fetcher } from '@/lib/fetcher'; -import Image from "next/image"; -import Logo from "/images/logo.svg"; -import LogOut from "@images/logout.svg"; +import Image from 'next/image'; +import Logo from '/images/logo.svg'; +import LogOut from '@images/logout.svg'; export default function Play() { const router = useRouter(); @@ -15,17 +15,17 @@ export default function Play() { const { data, error, isLoading } = useSWR('/api/test?key=' + password, fetcher); - useEffect(() => { - const pass = localStorage.getItem('@password'); - setPassword(pass); - if (!pass) { - router.push('/'); - } - }, [router]); + // useEffect(() => { + // const pass = localStorage.getItem('@password'); + // setPassword(pass); + // if (!pass) { + // router.push('/'); + // } + // }, [router]); return ( -
- {"Logo"} +
+ {'Logo'} {data && data.status == 200 && password && }
@@ -35,7 +35,7 @@ export default function Play() { router.push('/'); }} > - {"Logo"} + {'Logo'}
diff --git a/components/custom/testCard.tsx b/components/custom/testCard.tsx index 68d4001..754d420 100644 --- a/components/custom/testCard.tsx +++ b/components/custom/testCard.tsx @@ -1,49 +1,49 @@ 'use client'; -import Calendar from "../../images/date.svg"; -import Image from "next/image"; +import Calendar from '../../images/date.svg'; +import Image from 'next/image'; -import { Ban, Snowflake, CircleOff } from "lucide-react"; +import { Ban, Snowflake, CircleOff } from 'lucide-react'; export function TestCard({ data, error, isLoading }: { data: any; error: any; isLoading: boolean }) { - console.log(data); + //console.log(data); if (isLoading) return ( -
- {"Calendrier -
- - Chargement +
+ {'Calendrier +
+ + Chargement
); if (error) return ( -
- {"Calendrier -
- - Erreur +
+ {'Calendrier +
+ + Erreur
); if (data.status == 404) return ( -
- {"Calendrier -
- - Pas de test +
+ {'Calendrier +
+ + Pas de test
); return ( -
- {"Calendrier -
- {new Date().getDate()} - {data.testOf.firstName} +
+ {'Calendrier +
+ {new Date().getDate()} + {data.testOf.firstName}
); diff --git a/lib/authenticate.ts b/lib/authenticate.ts index 409f9aa..e7c56b1 100644 --- a/lib/authenticate.ts +++ b/lib/authenticate.ts @@ -30,7 +30,7 @@ export const authOptions: NextAuthOptions = { callbacks: { async jwt({ token, user }) { if (user) { - token.userId = user.id; + token.userId = parseInt(user.id as string); token.firstName = user.firstName; token.lastName = user.lastName; token.isTeacher = user.isTeacher; @@ -38,10 +38,12 @@ export const authOptions: NextAuthOptions = { return token; }, async session({ session, token, user }) { - session.user.id = token.userId; - session.user.firstName = token.firstName; - session.user.lastName = token.lastName; - session.user.isTeacher = token.isTeacher; + if(token) { + session.user.id = token.userId; + session.user.firstName = token.firstName; + session.user.lastName = token.lastName; + session.user.isTeacher = token.isTeacher; + } return session; }, }, diff --git a/types/next-auth.d.ts b/types/next-auth.d.ts index e139bbc..5b2fe1c 100644 --- a/types/next-auth.d.ts +++ b/types/next-auth.d.ts @@ -2,13 +2,13 @@ import NextAuth, { DefaultSession, DefaultJWT, DefaultUser } from "next-auth"; import { JWT } from "next-auth/jwt"; declare module "next-auth" { - interface Session extends Omit { + interface Session { user: { id: number; firstName: string; lastName: string isTeacher: boolean; - }; + } & DefaultSession["user"]; } interface User { id: number;