From c97add73765f0aefe7bb4831942ae1aa93560d64 Mon Sep 17 00:00:00 2001 From: Mannu Date: Mon, 11 May 2026 00:06:23 +0530 Subject: [PATCH] Fix login flow: login stays on login, onboarding checks auth, homepage checks family --- src/app/FamilyProvider.tsx | 12 +++++++----- src/app/login/page.tsx | 14 +++++++++++--- src/app/onboarding/page.tsx | 25 ++++++++++++++++++++++++- src/app/page.tsx | 10 +++++++++- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/app/FamilyProvider.tsx b/src/app/FamilyProvider.tsx index e849285..9f33d54 100644 --- a/src/app/FamilyProvider.tsx +++ b/src/app/FamilyProvider.tsx @@ -52,9 +52,8 @@ export function FamilyProvider({ children: providerChildren }: { children: React const sessionRes = await fetch("/api/auth/signin"); const sessionData = await sessionRes.json(); - // Not authenticated - redirect to login + // Not authenticated - stay on current page, don't redirect if (!sessionData.authenticated) { - router.push("/login"); setLoading(false); return; } @@ -66,8 +65,9 @@ export function FamilyProvider({ children: providerChildren }: { children: React return; } - // Fetch children for this family - const res = await fetch(`/api/children?familyId=${sessionData.familyId}`); + // Authenticated with family - check for children + const familyId = sessionData.familyId; + const res = await fetch(`/api/children?familyId=${familyId}`); const data = await res.json(); if (data.children?.length > 0) { @@ -84,9 +84,11 @@ export function FamilyProvider({ children: providerChildren }: { children: React } else { // No children - go to onboarding router.push("/onboarding"); + setLoading(false); + return; } - setFamilyId(sessionData.familyId); + setFamilyId(familyId); setTier(sessionData.tier || "free"); setMemberCount(2); } catch (err) { diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index a6d4b8a..67edf2a 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -7,12 +7,16 @@ export default function LoginPage() { const router = useRouter(); useEffect(() => { - // Check if already logged in via session cookie async function checkSession() { const res = await fetch("/api/auth/signin"); const data = await res.json(); + if (data.authenticated) { - router.push("/"); + if (data.familyId) { + router.push("/"); + } else { + router.push("/onboarding"); + } } } checkSession(); @@ -34,7 +38,11 @@ export default function LoginPage() { const data = await res.json(); if (data.success) { - router.push("/"); + if (data.familyId) { + router.push("/"); + } else { + router.push("/onboarding"); + } } else { alert(data.error || "Sign in failed"); } diff --git a/src/app/onboarding/page.tsx b/src/app/onboarding/page.tsx index 8d2d912..5d1e1bf 100644 --- a/src/app/onboarding/page.tsx +++ b/src/app/onboarding/page.tsx @@ -1,12 +1,13 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; export default function OnboardingPage() { const router = useRouter(); const [step, setStep] = useState(1); const [loading, setLoading] = useState(false); + const [checkingAuth, setCheckingAuth] = useState(true); const [form, setForm] = useState({ familyName: "", memberName: "", @@ -15,6 +16,20 @@ export default function OnboardingPage() { sex: "" as "male" | "female" | "other", }); + useEffect(() => { + async function checkAuth() { + const res = await fetch("/api/auth/signin"); + const data = await res.json(); + if (!data.authenticated) { + router.push("/login"); + } else if (data.familyId) { + router.push("/"); + } + setCheckingAuth(false); + } + checkAuth(); + }, [router]); + const handleSubmit = async () => { setLoading(true); try { @@ -32,6 +47,14 @@ export default function OnboardingPage() { setLoading(false); }; + if (checkingAuth) { + return ( +
+
Loading...
+
+ ); + } + return (
diff --git a/src/app/page.tsx b/src/app/page.tsx index 857868e..b25095d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -137,12 +137,20 @@ export default function HomePage() { const [pendingCount, setPendingCount] = useState(0); const [lastLogs, setLastLogs] = useState([]); const { theme, toggle: toggleTheme } = useTheme(); - const { childId, child, loading } = useFamily(); + const { childId, child, familyId, loading } = useFamily(); if (loading) { return
Loading...
; } + // Not logged in - redirect to login + if (!familyId) { + if (typeof window !== "undefined") { + window.location.href = "/login"; + } + return
Redirecting...
; + } + if (!childId) { return
No child found. Add a child in Family settings.
; }