From 81f023317e3fca430a01bef72be228ec288da38d Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Tue, 31 Mar 2026 16:16:06 -0700 Subject: [PATCH] fix: update session handling to refresh admin navigation after login --- src/app/auth/login/page.tsx | 11 +++++++++- src/components/Navigation.tsx | 35 +++++++++++++++++++++++------- src/components/SessionProvider.tsx | 5 +++-- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/app/auth/login/page.tsx b/src/app/auth/login/page.tsx index 884d197..f942dc8 100644 --- a/src/app/auth/login/page.tsx +++ b/src/app/auth/login/page.tsx @@ -4,9 +4,11 @@ import Link from "next/link" import { useRouter } from "next/navigation" import { useState } from "react" import { authClient } from "@/lib/auth-client" +import { useSession } from "@/components/SessionProvider" export default function LoginPage() { const router = useRouter() + const { refreshSession } = useSession() const [error, setError] = useState("") const [loading, setLoading] = useState(false) @@ -29,8 +31,15 @@ export default function LoginPage() { if (result.error) { setError(result.error.message || "Failed to sign in") } else { - // Navigate to admin page - Better Auth will handle session update + // Refresh the session after successful login + try { + await refreshSession() + } catch (err) { + console.error("Failed to refresh session:", err) + } + // Navigate to admin page router.push("/admin") + router.refresh() } } catch { setError("An unexpected error occurred") diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx index dbe4fdf..efda8a3 100644 --- a/src/components/Navigation.tsx +++ b/src/components/Navigation.tsx @@ -9,16 +9,29 @@ export default function Navigation() { const { session, loading } = useSession() const [userRole, setUserRole] = useState(null) + // Fetch user role whenever session changes useEffect(() => { - // Fetch user role from database if session exists - const userId = (session?.user as { id?: string })?.id - if (userId) { - fetch(`/api/users/${userId}/role`) - .then(res => res.json()) - .then(data => setUserRole(data.role)) - .catch(() => setUserRole(null)); + const fetchUserRole = async () => { + const userId = (session?.user as { id?: string })?.id + if (userId) { + try { + const response = await fetch(`/api/users/${userId}/role`) + if (response.ok) { + const data = await response.json() + setUserRole(data.role) + } else { + setUserRole(null) + } + } catch { + setUserRole(null) + } + } else { + setUserRole(null) + } } - }, [session]); + + fetchUserRole() + }, [session]) const handleLogout = async () => { await authClient.signOut() @@ -56,6 +69,12 @@ export default function Navigation() { > Admin + + Matches +