diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index bf6970e..e671a54 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { FormEvent, useEffect, useMemo, useState } from 'react'; +import { FormEvent, useEffect, useMemo, useRef, useState } from 'react'; const defaultApiBase = process.env.NODE_ENV === 'production' @@ -212,16 +212,19 @@ export default function Page() { const [profileLoading, setProfileLoading] = useState(false); const [profileSelectedBase, setProfileSelectedBase] = useState(null); const [loading, setLoading] = useState(true); + const isAuthenticatedRef = useRef(false); useEffect(() => { (async () => { try { const data = await request('GET', API.me); setUser(data.user); + isAuthenticatedRef.current = true; await refreshData(); setView('dashboard'); } catch (_err) { setUser(null); + isAuthenticatedRef.current = false; setView('dashboard'); } finally { setLoading(false); @@ -230,7 +233,7 @@ export default function Page() { }, []); async function refreshData() { - if (!user && !document.cookie.includes('token')) { + if (!isAuthenticatedRef.current) { return; } try { @@ -303,6 +306,7 @@ export default function Page() { setErrors((prev) => ({ ...prev, login: '' })); const data = await request('POST', API.login, payload); setUser(data.user); + isAuthenticatedRef.current = true; await refreshData(); setView('dashboard'); } catch (error: any) { @@ -321,6 +325,7 @@ export default function Page() { setErrors((prev) => ({ ...prev, signup: '' })); const data = await request('POST', API.signup, payload); setUser(data.user); + isAuthenticatedRef.current = true; await refreshData(); setView('dashboard'); } catch (error: any) { @@ -610,6 +615,7 @@ export default function Page() { setProfileSearchTerm(''); setProfileError(''); setProfileLoading(false); + isAuthenticatedRef.current = false; setView('dashboard'); } }