diff --git a/frontend/src/lib/hooks/useAuth.tsx b/frontend/src/lib/hooks/useAuth.tsx index 1473056..f0df035 100644 --- a/frontend/src/lib/hooks/useAuth.tsx +++ b/frontend/src/lib/hooks/useAuth.tsx @@ -41,22 +41,35 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { checkAuth(); }, []); + const normalizeProfilePayload = (payload: any): { user: User | null; organizations: Organization[] } => { + const organizations = payload?.organizations || []; + + if (payload?.user) { + return { user: payload.user as User, organizations }; + } + + if (payload?.id && payload?.email && payload?.name) { + return { + user: { + id: payload.id, + email: payload.email, + name: payload.name, + }, + organizations, + }; + } + + return { user: null, organizations }; + }; + const checkAuth = async () => { try { setIsLoading(true); - const hasSession = document.cookie.includes('accessToken'); - - if (!hasSession) { - console.log('No session → skipping auth check'); - return; - } - const response = await authApi.getProfile(); if (response.success) { - const userData = response.data.user; - const orgs = response.data.organizations || []; + const { user: userData, organizations: orgs } = normalizeProfilePayload(response.data); setUser(userData); setOrganizations(orgs); @@ -65,9 +78,12 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { if (storedOrgId && orgs.length > 0) { const org = orgs.find(o => o.id === storedOrgId); if (org) setCurrentOrganization(org); - } else if (orgs.length === 1) { + else setCurrentOrganization(null); + } else if (orgs.length === 1 && userData) { setCurrentOrganization(orgs[0]); localStorage.setItem('currentOrganizationId', orgs[0].id); + } else { + setCurrentOrganization(null); } } } catch (err) { diff --git a/frontend/src/middleware.ts b/frontend/src/middleware.ts index 96835b2..d067010 100644 --- a/frontend/src/middleware.ts +++ b/frontend/src/middleware.ts @@ -10,6 +10,11 @@ export function middleware(request: NextRequest) { const token = request.cookies.get('accessToken')?.value; const isAuthenticated = !!token; + // If a logged-in user opens home, send them to dashboard. + if (isAuthenticated && pathname === '/') { + return NextResponse.redirect(new URL('/today', request.url)); + } + // Always allow public routes first if (publicRoutes.includes(pathname)) { // If user is already logged in and tries to access login/register → redirect to dashboard