feat: Prevent flash of unauthenticated content and premature redirects by checking for existing tokens in local storage.

This commit is contained in:
pradeepkumar
2026-03-03 16:08:23 +05:30
parent 335c3a0268
commit ef0c4fa77b
2 changed files with 33 additions and 21 deletions

View File

@@ -2,7 +2,7 @@
import { useSession } from 'next-auth/react';
import { useRouter, usePathname } from 'next/navigation';
import { useEffect } from 'react';
import { useEffect, useState } from 'react';
import { Footer } from '@/components/layout/Footer';
import { CommonHeader } from '@/components/layout/CommonHeader';
import { PresenceProvider } from '@/components/providers/presence-provider';
@@ -27,10 +27,16 @@ export default function UserLayout({
const { data: session, status } = useSession();
const router = useRouter();
const pathname = usePathname();
const [hasTokens, setHasTokens] = useState(false);
const isDashboard = pathname === '/user/dashboard';
const isPublic = isPublicPath(pathname);
// Fast check for existing tokens on mount
useEffect(() => {
setHasTokens(!!localStorage.getItem('accessToken'));
}, []);
useEffect(() => {
if (status === 'loading') return;
@@ -48,7 +54,12 @@ export default function UserLayout({
// Protected pages require login
if (!session) {
router.replace('/login');
// Check localStorage - if tokens exist, session might still be resolving
// Don't redirect to /login prematurely (prevents login page flash)
const tokensExist = !!localStorage.getItem('accessToken');
if (!tokensExist) {
router.replace('/login');
}
return;
}