From 6623e87ea9b5582fc694ab7262c771f85ed2ec2c Mon Sep 17 00:00:00 2001 From: marko-kraemer Date: Sun, 27 Apr 2025 04:48:09 +0100 Subject: [PATCH] fix login redirect --- docker-compose.yaml | 2 -- frontend/src/app/auth/actions.ts | 6 ++++-- frontend/src/app/auth/page.tsx | 18 +++++++++++++++++- frontend/src/components/GoogleSignIn.tsx | 10 ++++++++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3c909e53..e47b3290 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,5 +1,3 @@ -version: '3.8' - services: redis: image: redis:7-alpine diff --git a/frontend/src/app/auth/actions.ts b/frontend/src/app/auth/actions.ts index 7fcac08e..c26d232a 100644 --- a/frontend/src/app/auth/actions.ts +++ b/frontend/src/app/auth/actions.ts @@ -27,7 +27,8 @@ export async function signIn(prevState: any, formData: FormData) { return { message: error.message || "Could not authenticate user" }; } - return redirect(returnUrl || "/dashboard"); + // Use client-side navigation instead of server-side redirect + return { success: true, redirectTo: returnUrl || "/dashboard" }; } export async function signUp(prevState: any, formData: FormData) { @@ -73,7 +74,8 @@ export async function signUp(prevState: any, formData: FormData) { return { message: "Account created! Check your email to confirm your registration." }; } - return redirect(returnUrl || "/dashboard"); + // Use client-side navigation instead of server-side redirect + return { success: true, redirectTo: returnUrl || "/dashboard" }; } export async function forgotPassword(prevState: any, formData: FormData) { diff --git a/frontend/src/app/auth/page.tsx b/frontend/src/app/auth/page.tsx index 75096c52..069a39c0 100644 --- a/frontend/src/app/auth/page.tsx +++ b/frontend/src/app/auth/page.tsx @@ -104,7 +104,16 @@ function LoginContent() { } else { formData.append("returnUrl", "/dashboard"); } - return signIn(prevState, formData); + const result = await signIn(prevState, formData); + + // Check for success and redirectTo properties + if (result && typeof result === 'object' && 'success' in result && result.success && 'redirectTo' in result) { + // Use window.location for hard navigation to avoid stale state + window.location.href = result.redirectTo as string; + return null; // Return null to prevent normal form action completion + } + + return result; }; const handleSignUp = async (prevState: any, formData: FormData) => { @@ -121,6 +130,13 @@ function LoginContent() { const result = await signUp(prevState, formData); + // Check for success and redirectTo properties (direct login case) + if (result && typeof result === 'object' && 'success' in result && result.success && 'redirectTo' in result) { + // Use window.location for hard navigation to avoid stale state + window.location.href = result.redirectTo as string; + return null; // Return null to prevent normal form action completion + } + // Check if registration was successful but needs email verification if (result && typeof result === 'object' && 'message' in result) { const resultMessage = result.message as string; diff --git a/frontend/src/components/GoogleSignIn.tsx b/frontend/src/components/GoogleSignIn.tsx index e8bce93c..3b94364b 100644 --- a/frontend/src/components/GoogleSignIn.tsx +++ b/frontend/src/components/GoogleSignIn.tsx @@ -68,6 +68,9 @@ export default function GoogleSignIn({ returnUrl }: GoogleSignInProps) { try { setIsLoading(true); const supabase = createClient(); + + console.log('Starting Google sign in process'); + const { error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: response.credential, @@ -75,10 +78,13 @@ export default function GoogleSignIn({ returnUrl }: GoogleSignInProps) { if (error) throw error; - // Add a small delay before redirecting to ensure localStorage is properly saved + console.log('Google sign in successful, preparing redirect to:', returnUrl || "/dashboard"); + + // Add a longer delay before redirecting to ensure localStorage is properly saved setTimeout(() => { + console.log('Executing redirect now to:', returnUrl || "/dashboard"); window.location.href = returnUrl || "/dashboard"; - }, 100); + }, 500); // Increased from 100ms to 500ms } catch (error) { console.error('Error signing in with Google:', error); setIsLoading(false);