cover

Remix + React + Recaptcha ⚡️

author photo

Héctorbliss

@hectorbliss

Cuando construyes una aplicación web que recibe tráfico del mundo entero, inevitablemente vas a recibir visitas de bots. Algunos son inofensivos, pero otros intentarán hacer spam, ataques de fuerza bruta o saturar tu servidor.

Google reCAPTCHA es una excelente primera línea de defensa. En este post te muestro cómo integrarlo en una aplicación de Remix con React.

Las dos piezas necesarias

Para integrar reCAPTCHA necesitas implementar dos partes:

  1. El cliente (React): Un componente que carga el script de Google y ejecuta la verificación
  2. El servidor (Remix): Un action que valida el token con la API de Google

Veamos cada una.


🎬 ¿Te está gustando este contenido? Tenemos más tutoriales en video en nuestro canal de YouTube.


El componente Recaptcha

Este componente encapsula toda la lógica del cliente. Lo puedes usar en cualquier formulario:

Uso del componente

Validación en el servidor con createAssessment

En el servidor, necesitas validar el token que recibiste del cliente. Google ofrece dos APIs:

  1. reCAPTCHA v3 estándar: Más simple, usa siteverify
  2. reCAPTCHA Enterprise: Más potente, usa createAssessment

Aquí te muestro la implementación con reCAPTCHA Enterprise usando createAssessment:

El action de Remix

Interpretando el score

reCAPTCHA v3/Enterprise retorna un score entre 0.0 y 1.0:

ScoreInterpretación
0.9 - 1.0Muy probablemente humano
0.7 - 0.9Probablemente humano
0.5 - 0.7Sospechoso
0.3 - 0.5Probablemente bot
0.0 - 0.3Muy probablemente bot

Mi recomendación:

  • Formularios normales: Acepta score >= 0.5
  • Pagos/acciones críticas: Requiere score >= 0.7
  • Score bajo pero no bot: Muestra un CAPTCHA tradicional como fallback

Variables de entorno necesarias

Recursos útiles

Abrazo. bliss.

meta cover

Todo Mundo Habla de TailwindCSS. Pero, ¿qué Es Tailwind?

Checa este otro Post

meta cover

La oportunidad que nadie está viendo: consultoría técnica de LLMs

Checa este otro Post

¡Nuevo curso!

Animaciones web con React + Motion 🧙🏻