Skip to content

Troubleshooting reCAPTCHA en login ​

Este checklist ayuda a diagnosticar casos donde el login falla con reCAPTCHA verification failed, especialmente cuando en modo incógnito sí funciona.

1) Validación rápida con usuario afectado ​

  1. Probar en ventana normal y confirmar si en incógnito funciona.
  2. Desactivar extensiones de privacidad/bloqueadores para abaco.hn y api.abaco.hn.
  3. Borrar datos del sitio para:
    • abaco.hn
    • api.abaco.hn
    • google.com
    • gstatic.com
  4. Verificar fecha/hora del dispositivo.
  5. Probar otra red (hotspot móvil) para descartar bloqueo por IP/red.

2) Revisión en Google reCAPTCHA (consola) ​

En la consola de Google reCAPTCHA revisar:

  • El site key pertenece al ambiente correcto (producción).
  • El secret key del backend corresponde al mismo site key.
  • Los dominios permitidos incluyen abaco.hn (y los subdominios necesarios).
  • No hubo rotación parcial de claves (frontend actualizado y backend no, o viceversa).

3) Variables de entorno a confirmar ​

  • Frontend build:
    • NEXT_PUBLIC_RECAPTCHA_SITE_KEY
  • Backend:
    • RECAPTCHA_SECRET_KEY
    • RECAPTCHA_DISABLED (debe estar desactivado en producción)
    • RECAPTCHA_MIN_SCORE (umbral de score; por defecto 0.3, usado para registrar/monitorear)
    • RECAPTCHA_ENFORCE_SCORE (por defecto no bloquea por score bajo; solo se registra. Activar a true solo si se quiere bloquear logins con score por debajo del umbral)
    • RECAPTCHA_FAIL_OPEN (por defecto true: si el backend no puede contactar a Google, permite el login para no bloquear a todos. Poner false para fail-closed)

Nota: desde el ajuste para reducir falsos bloqueos, un score bajo ya no bloquea el login por defecto; se registra como [reCAPTCHA] low score allowed para monitoreo. Los logins se siguen rechazando cuando Google declina el token (google-declined), hay desajuste de acción (action-mismatch) o falta el token (missing-token).

Mitigaciones adicionales aplicadas:

  • Fail-open ante caída de red backend→Google (siteverify-request-failed): por defecto se permite el login (configurable con RECAPTCHA_FAIL_OPEN); se registra [reCAPTCHA] siteverify request failed.
  • reason en la respuesta: el endpoint devuelve { code: 'RECAPTCHA_FAILED', reason } para diagnóstico.
  • Reintento automático en el frontend: ante un fallo temporal (google-declined, siteverify-request-failed, missing-token) el formulario reintenta una vez con un token nuevo.

4) Señales en logs y causa probable ​

Con la instrumentación actual, revisar logs del backend para el evento [reCAPTCHA] verification failed:

  • errorCodes:
    • invalid-input-response: token inválido o malformado.
    • timeout-or-duplicate: token expirado o reutilizado.
    • bad-request: request inválido al endpoint de Google.
  • action-mismatch: el token no corresponde a la acción esperada (login/register).
  • score-too-low: score inferior al umbral definido en RECAPTCHA_MIN_SCORE.
  • siteverify-request-failed: problema de red/timeout hacia Google desde el backend.

5) Mitigaciones recomendadas ​

  • Mantener bloqueado el submit cuando no se genere token en frontend.
  • Reintentar token cuando el error sea temporal de red.
  • Exponer un mensaje de soporte con pasos de navegador/red para el usuario final.
  • Monitorear tasa de RECAPTCHA_FAILED por navegador/IP para detectar bloqueos masivos.

Documentación API abaco · Changelog