diff --git a/src/app/client-login/page.tsx b/src/app/client-login/page.tsx index 76acfa1..d309f9e 100644 --- a/src/app/client-login/page.tsx +++ b/src/app/client-login/page.tsx @@ -2,6 +2,7 @@ import { useState } from 'react'; import { useRouter } from 'next/navigation'; +import { createClient } from '@/lib/supabase/client'; export default function ClientLoginPage() { const [email, setEmail] = useState(''); @@ -9,6 +10,7 @@ export default function ClientLoginPage() { const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const router = useRouter(); + const supabase = createClient(); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); @@ -27,13 +29,27 @@ export default function ClientLoginPage() { if (!res.ok) { setError(data.error || 'Login failed'); + console.error('Login error:', data); return; } - // Redirect to contributor dashboard + // Hydrate Supabase client with the session from the API response so + // AuthContext picks it up immediately and the next render of + // /contributor sees an authenticated user (no flash of logged-out + // state, no race against cookie propagation). + if (data.session?.access_token && data.session?.refresh_token) { + await supabase.auth.setSession({ + access_token: data.session.access_token, + refresh_token: data.session.refresh_token, + }); + } + + // Redirect to contributor dashboard (fresh session in AuthContext) router.push('/contributor'); + router.refresh(); } catch (err: any) { setError(err.message || 'An error occurred'); + console.error('Login exception:', err); } finally { setLoading(false); }