diff --git a/src/components/auth/AuthButtons.tsx b/src/components/auth/AuthButtons.tsx
index 85f72fc9..73ad476e 100644
--- a/src/components/auth/AuthButtons.tsx
+++ b/src/components/auth/AuthButtons.tsx
@@ -42,8 +42,8 @@ export function AuthButtons() {
}
};
- // Show loading skeleton during auth check
- if (loading) {
+ // Show loading skeleton during auth check OR when user exists but profile hasn't loaded yet
+ if (loading || (user && !profile)) {
return (
diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx
index 0884f9d6..d3aa4612 100644
--- a/src/hooks/useAuth.tsx
+++ b/src/hooks/useAuth.tsx
@@ -191,6 +191,8 @@ function AuthProviderComponent({ children }: { children: React.ReactNode }) {
setSession(session);
setUser(session.user);
sessionVerifiedRef.current = true;
+ // Keep loading true until profile is fetched
+ setLoading(true);
} else if (event === 'INITIAL_SESSION') {
if (session?.user) {
authLog('[Auth] INITIAL_SESSION with user, setting session');
@@ -296,10 +298,9 @@ function AuthProviderComponent({ children }: { children: React.ReactNode }) {
profileFetchTimeoutRef.current = setTimeout(() => {
fetchProfile(session.user.id, 0, () => {
- if (shouldWaitForProfile) {
- authLog('[Auth] Profile fetch complete, setting loading to false');
- setLoading(false);
- }
+ // Always set loading to false after profile fetch for authenticated users
+ authLog('[Auth] Profile fetch complete, setting loading to false');
+ setLoading(false);
});
profileFetchTimeoutRef.current = null;
}, 0);