diff --git a/src/components/Navigation.astro b/src/components/Navigation.astro index 67ca995..72a27e2 100644 --- a/src/components/Navigation.astro +++ b/src/components/Navigation.astro @@ -299,13 +299,52 @@ import ThemeToggle from './ThemeToggle.tsx'; // Check authentication and load user info async function initializeNavigation() { - const { data: { session } } = await supabase.auth.getSession(); - if (!session) { - window.location.href = '/'; + // Try to get session, but don't redirect if none found since auth is handled server-side + const { data: { session }, error: sessionError } = await supabase.auth.getSession(); + + if (sessionError || !session) { + // Try to get user directly (handles token refresh internally) + const { data: { user }, error: userError } = await supabase.auth.getUser(); + + if (userError || !user) { + console.log('[NAV] No user session found, user likely not authenticated'); + // Don't redirect - let server-side auth handle this + return; + } + + // Use the user data we got directly + const userName = user.user_metadata.name || user.email; + const userEmail = user.email; + + // Update all name displays + if (userNameText) userNameText.textContent = userName; + if (mobileUserNameText) mobileUserNameText.textContent = userName; + if (dropdownName) dropdownName.textContent = userName; + if (dropdownEmail) dropdownEmail.textContent = userEmail; + + // Generate user initials + const initials = userName.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2); + if (userAvatar) userAvatar.textContent = initials; + if (mobileUserAvatar) mobileUserAvatar.textContent = initials; + if (dropdownAvatar) dropdownAvatar.textContent = initials; + + // Check if user is admin and show admin badge/menu items + const { data: userProfile } = await supabase + .from('users') + .select('role') + .eq('id', user.id) + .single(); + + if (userProfile?.role === 'admin') { + if (adminBadge) adminBadge.classList.remove('hidden'); + if (mobileAdminBadge) mobileAdminBadge.classList.remove('hidden'); + if (adminMenuItem) adminMenuItem.classList.remove('hidden'); + if (mobileAdminMenuItem) mobileAdminMenuItem.classList.remove('hidden'); + } return; } - // Load user info + // Session exists, use session user const { data: { user } } = await supabase.auth.getUser(); if (user) { const userName = user.user_metadata.name || user.email; diff --git a/src/pages/dashboard.astro b/src/pages/dashboard.astro index 8c37aab..77f1265 100644 --- a/src/pages/dashboard.astro +++ b/src/pages/dashboard.astro @@ -359,32 +359,46 @@ if (!auth) { async function loadEvents() { try { // Get current user (auth already verified server-side) - const { data: { user } } = await supabase.auth.getUser(); + const { data: { user }, error: userError } = await supabase.auth.getUser(); - if (!user) { - // This shouldn't happen due to server-side auth, but handle gracefully - console.error('No user found despite server-side auth'); - loading.innerHTML = ` -
Session error
-Please refresh the page
-Error loading user profile
-${userError.message || userError}
+${userProfileError.message || userProfileError}