Fix Turnstile login using immediate credential refs

This commit is contained in:
Patrick Britton 2026-02-16 12:11:32 -06:00
parent 2d3d181e45
commit 416fbc6fc1

View file

@ -17,6 +17,8 @@ export default function LoginPage() {
const turnstileRef = useRef<HTMLDivElement>(null); const turnstileRef = useRef<HTMLDivElement>(null);
const widgetIdRef = useRef<string | null>(null); const widgetIdRef = useRef<string | null>(null);
const tokenRef = useRef(''); const tokenRef = useRef('');
const emailRef = useRef('');
const passwordRef = useRef('');
const { login } = useAuth(); const { login } = useAuth();
const router = useRouter(); const router = useRouter();
@ -26,16 +28,15 @@ export default function LoginPage() {
const performLogin = useCallback(async () => { const performLogin = useCallback(async () => {
setLoading(true); setLoading(true);
try { try {
await login(email, password, tokenRef.current); await login(emailRef.current, passwordRef.current, tokenRef.current);
router.push('/'); router.push('/');
} catch (err: any) { } catch (err: any) {
setError(err.message || 'Login failed. Check your credentials.'); setError(err.message || 'Login failed. Check your credentials.');
// Reset turnstile for retry
refreshTurnstile(); refreshTurnstile();
} finally { } finally {
setLoading(false); setLoading(false);
} }
}, [email, password, tokenRef.current, login, router]); }, [login, router]);
const renderTurnstile = useCallback(() => { const renderTurnstile = useCallback(() => {
if (!TURNSTILE_SITE_KEY || !turnstileRef.current || !(window as any).turnstile) return; if (!TURNSTILE_SITE_KEY || !turnstileRef.current || !(window as any).turnstile) return;
@ -130,7 +131,11 @@ export default function LoginPage() {
type="email" type="email"
className="input" className="input"
value={email} value={email}
onChange={(e) => setEmail(e.target.value)} onChange={(e) => {
const v = e.target.value;
emailRef.current = v;
setEmail(v);
}}
placeholder="admin@sojorn.net" placeholder="admin@sojorn.net"
required required
/> />
@ -141,7 +146,11 @@ export default function LoginPage() {
type="password" type="password"
className="input" className="input"
value={password} value={password}
onChange={(e) => setPassword(e.target.value)} onChange={(e) => {
const v = e.target.value;
passwordRef.current = v;
setPassword(v);
}}
placeholder="••••••••" placeholder="••••••••"
required required
/> />