From a979d6b0515a37d6701e219cf167d0c5c5dc8e7b Mon Sep 17 00:00:00 2001 From: pmoharana-cmd Date: Tue, 23 Apr 2024 21:21:55 -0400 Subject: [PATCH] Fix enum bugs and sign out issues --- compass/app/auth/actions.ts | 32 +++++++++++++++++---- compass/app/resource/layout.tsx | 14 +++------ compass/components/resource/UserProfile.tsx | 6 +++- compass/utils/models/User.ts | 12 ++++---- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/compass/app/auth/actions.ts b/compass/app/auth/actions.ts index e940050..ee4d717 100644 --- a/compass/app/auth/actions.ts +++ b/compass/app/auth/actions.ts @@ -1,37 +1,57 @@ "use server"; - import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { createClient } from "@/utils/supabase/server"; - -const supabase = createClient(); +import User, { Role } from "@/utils/models/User"; export async function login(email: string, password: string) { + const supabase = createClient(); // type-casting here for convenience // in practice, you should validate your inputs const data = { email, password, }; - const { error } = await supabase.auth.signInWithPassword(data); - if (error) { return "Incorrect email/password"; } + const supabaseUser = await supabase.auth.getUser(); + + if (!supabaseUser.data.user) { + revalidatePath("/resource", "layout"); + redirect("/resource"); + } + + const apiData = await fetch( + `${process.env.NEXT_PUBLIC_HOST}/api/user?uuid=${supabaseUser.data.user.id}` + ); + + const user: User = await apiData.json(); + + console.log(user); + + if (user.role === Role.ADMIN) { + redirect("/admin"); + } + revalidatePath("/resource", "layout"); redirect("/resource"); } export async function signOut() { + const supabase = createClient(); + const { data, error } = await supabase.auth.getUser(); if (error || !data?.user) { redirect("auth/login"); } - supabase.auth.signOut(); + console.log(`Signed out ${data.user.email}!`); + + await supabase.auth.signOut(); revalidatePath("/resource", "layout"); redirect("/auth/login"); diff --git a/compass/app/resource/layout.tsx b/compass/app/resource/layout.tsx index 49e3a09..4900dce 100644 --- a/compass/app/resource/layout.tsx +++ b/compass/app/resource/layout.tsx @@ -1,5 +1,4 @@ "use client"; - import Sidebar from "@/components/resource/Sidebar"; import React, { useState } from "react"; import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline"; @@ -7,7 +6,6 @@ import { createClient } from "@/utils/supabase/client"; import { useEffect } from "react"; import { User } from "@supabase/supabase-js"; import { useRouter } from "next/navigation"; - export default function RootLayout({ children, }: { @@ -16,30 +14,26 @@ export default function RootLayout({ const [isSidebarOpen, setIsSidebarOpen] = useState(false); const [user, setUser] = useState(); const router = useRouter(); - useEffect(() => { const supabase = createClient(); - async function getUser() { const { data, error } = await supabase.auth.getUser(); - if (error || data.user === null) { + console.log(data, error); + + if (error) { + console.log("Accessed resource page but not logged in"); router.push("auth/login"); return; } - setUser(data.user); - const userData = await fetch( `${process.env.NEXT_PUBLIC_HOST}/api/user?uuid=${data.user.id}` ); - - console.log(await userData.json()); } getUser(); }, [router]); - return (
{/* button to open sidebar */} diff --git a/compass/components/resource/UserProfile.tsx b/compass/components/resource/UserProfile.tsx index e0c342c..d2780a6 100644 --- a/compass/components/resource/UserProfile.tsx +++ b/compass/components/resource/UserProfile.tsx @@ -5,6 +5,10 @@ interface UserProfileProps { email: string; } +const handleClick = async (event: React.MouseEvent) => { + await signOut(); +}; + export const UserProfile = ({ name, email }: UserProfileProps) => { return (
@@ -15,7 +19,7 @@ export const UserProfile = ({ name, email }: UserProfileProps) => { {email}