From 9ba77fb2ac934ca8aac2114bc0fb82608d0c6984 Mon Sep 17 00:00:00 2001 From: "C. Cassel" Date: Thu, 19 Mar 2026 16:52:09 -0400 Subject: [PATCH] fix: auto-close signup modal when autoconfirm is enabled Co-Authored-By: Claude Opus 4.6 (1M context) --- calcpad-web/src/auth/AuthModal.tsx | 3 +++ calcpad-web/src/auth/AuthProvider.tsx | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/calcpad-web/src/auth/AuthModal.tsx b/calcpad-web/src/auth/AuthModal.tsx index 1d76e76..725ce9b 100644 --- a/calcpad-web/src/auth/AuthModal.tsx +++ b/calcpad-web/src/auth/AuthModal.tsx @@ -26,6 +26,9 @@ export function AuthModal({ onClose, renewalMode = false }: AuthModalProps) { const result = await auth.signUp(email, password) if (result.error) { setError(result.error) + } else if (result.autoConfirmed) { + // Auto-confirmed — user is already signed in + onClose() } else { setSignupSuccess(true) } diff --git a/calcpad-web/src/auth/AuthProvider.tsx b/calcpad-web/src/auth/AuthProvider.tsx index 7e15fa9..acb34a9 100644 --- a/calcpad-web/src/auth/AuthProvider.tsx +++ b/calcpad-web/src/auth/AuthProvider.tsx @@ -62,11 +62,19 @@ export function AuthProvider({ children }: { children: ReactNode }) { }, []) const signUp = useCallback(async (email: string, password: string) => { - if (!supabase) return { error: 'Supabase not configured' } + if (!supabase) return { error: 'Supabase not configured', autoConfirmed: false } - const { error } = await supabase.auth.signUp({ email, password }) - if (error) return { error: error.message } - return { error: null } + const { data, error } = await supabase.auth.signUp({ email, password }) + if (error) return { error: error.message, autoConfirmed: false } + + // If session exists, user was auto-confirmed (GOTRUE_MAILER_AUTOCONFIRM=true) + const autoConfirmed = !!data.session + if (autoConfirmed && data.user) { + await recordPasswordAuth(data.user.id) + setNeedsPasswordRenewal(false) + } + + return { error: null, autoConfirmed } }, []) const signIn = useCallback(async (email: string, password: string) => {