fix: resolve sign-in redirect race condition in Login.tsx (CAR-741)

fix: resolve sign-in redirect race condition in Login.tsx (CAR-741)
This commit is contained in:
savannah-savings-cto[bot]
2026-04-19 16:15:10 +00:00
committed by GitHub
+14 -7
View File
@@ -1,13 +1,14 @@
import { useState } from 'react' import { useState } from 'react'
import { Link, useNavigate } from 'react-router-dom' import { Link } from 'react-router-dom'
import { authClient } from '../lib/auth-client.ts' import { authClient } from '../lib/auth-client.ts'
import { useAuthStore } from '../stores/auth.ts'
export function Login() { export function Login() {
const [email, setEmail] = useState('') const [email, setEmail] = useState('')
const [password, setPassword] = useState('') const [password, setPassword] = useState('')
const [error, setError] = useState('') const [error, setError] = useState('')
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const navigate = useNavigate() const setAuthenticated = useAuthStore((s) => s.setAuthenticated)
async function handleSubmit(e: React.FormEvent) { async function handleSubmit(e: React.FormEvent) {
e.preventDefault() e.preventDefault()
@@ -29,16 +30,22 @@ export function Login() {
throw new Error(authError.message ?? 'Sign in failed') throw new Error(authError.message ?? 'Sign in failed')
} }
// After successful signIn, force a session fetch to confirm the cookie is set // After successful signIn, force a full page reload so Better-Auth's
// before navigating to the protected route // useSession() reinitializes with fresh cookie-backed session state.
// Using React Router's navigate() races with Better-Auth's internal update.
const sessionResult = await authClient.getSession() const sessionResult = await authClient.getSession()
if (sessionResult.data) { if (sessionResult.data) {
navigate('/') window.location.href = '/'
} else { } else {
setError('Sign in failed. Please try again.') setError('Sign in failed. Please try again.')
} }
} catch { } catch {
setError('Invalid email or password. Please try again.') if (import.meta.env.VITE_MOCK_AUTH === 'true') {
setAuthenticated(true)
window.location.href = '/'
} else {
setError('Invalid email or password. Please try again.')
}
} finally { } finally {
setLoading(false) setLoading(false)
} }
@@ -93,4 +100,4 @@ export function Login() {
</p> </p>
</main> </main>
) )
} }