diff --git a/src/components/LoginForm.tsx b/src/components/LoginForm.tsx index 6973fe5..b45e743 100644 --- a/src/components/LoginForm.tsx +++ b/src/components/LoginForm.tsx @@ -230,7 +230,7 @@ const LoginForm: React.FC = () => { } setSuccess(true); - login(data.accessToken, data.user); + await login(data.accessToken, data.user); setTimeout(() => { if (deviceCode) { // Check onboarding status before redirecting diff --git a/src/components/OAuthCallback.tsx b/src/components/OAuthCallback.tsx index b89c7e4..069d995 100644 --- a/src/components/OAuthCallback.tsx +++ b/src/components/OAuthCallback.tsx @@ -66,8 +66,8 @@ const OAuthCallback: React.FC = () => { }); if (result.success && result.data) { - // Update auth state - login(result.data.accessToken, result.data.user); + // Update auth state (hydrates from /api/auth/me for full user fields) + await login(result.data.accessToken, result.data.user); setStatus('success'); diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index f1280c7..f585cb0 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -34,7 +34,7 @@ interface AuthContextType { isAuthenticated: boolean; loading: boolean; loggingOut: boolean; - login: (token: string, user: User) => void; + login: (token: string, user: User) => Promise; logout: () => Promise; updateUser: (user: User) => void; completeOnboarding: ( @@ -134,8 +134,21 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ checkAuth(); }, []); - const login = useCallback((token: string, userData: User) => { + const login = useCallback(async (token: string, userData: User) => { localStorage.setItem('accessToken', token); + const apiBaseUrl = getApiBaseUrl(); + try { + const response = await fetch(`${apiBaseUrl}/api/auth/me`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (response.ok) { + const data = await response.json(); + setUser(data.user); + return; + } + } catch { + /* fall back to login / OAuth payload */ + } setUser(userData); }, []);