# Configuración de Google reCAPTCHA v3

Este proyecto utiliza Google reCAPTCHA v3 para proteger el formulario de inicio de sesión contra bots y ataques automatizados.

## Paso 1: Obtener las claves de reCAPTCHA

1. Ve a la consola de administración de Google reCAPTCHA: https://www.google.com/recaptcha/admin
2. Haz clic en el botón "+" para crear un nuevo sitio
3. Completa el formulario:
   - **Etiqueta**: Nombre de tu proyecto (ej: "Alcaldia - Sistema Web")
   - **Tipo de reCAPTCHA**: Selecciona "reCAPTCHA v3"
   - **Dominios**: Agrega los dominios donde se usará:
     - `localhost` (para desarrollo)
     - Tu dominio de producción (ej: `tusitio.com`)
   - Acepta los términos de servicio
4. Haz clic en "Enviar"
5. Copia las claves que se generan:
   - **Clave del sitio** (Site Key)
   - **Clave secreta** (Secret Key)

## Paso 2: Configurar las variables de entorno

Abre tu archivo `.env` y actualiza las siguientes líneas con tus claves reales:

```env
# Google reCAPTCHA v3 Keys
RECAPTCHA_SITE_KEY=tu_clave_del_sitio_aqui
RECAPTCHA_SECRET_KEY=tu_clave_secreta_aqui
VITE_RECAPTCHA_SITE_KEY="${RECAPTCHA_SITE_KEY}"
```

**IMPORTANTE**: Reemplaza `tu_clave_del_sitio_aqui` y `tu_clave_secreta_aqui` con las claves reales que copiaste en el Paso 1.

## Paso 3: Reconstruir los assets de frontend

Después de actualizar el archivo `.env`, ejecuta:

```bash
npm run build
```

O si estás en modo desarrollo:

```bash
npm run dev
```

## Paso 4: Limpiar la caché de configuración (Producción)

Si estás en producción, ejecuta:

```bash
php artisan config:cache
php artisan cache:clear
```

## Cómo funciona

### Frontend (Login.vue)
- reCAPTCHA v3 funciona en segundo plano sin interrumpir la experiencia del usuario
- Cuando el usuario envía el formulario de login, se genera automáticamente un token
- El token se envía junto con las credenciales al servidor

### Backend (LoginRequest.php)
- El servidor valida el token con la API de Google
- Se verifica que:
  - El token sea válido
  - La acción coincida con "login"
  - El score sea mayor a 0.5 (umbral de confianza)
- Si la validación falla, se rechaza el intento de login

## Ajustar el umbral de seguridad

El score de reCAPTCHA v3 va de 0.0 (muy probablemente un bot) a 1.0 (muy probablemente humano).

Por defecto, el umbral está en **0.5**. Puedes ajustarlo en el archivo:
`app/Http/Requests/Auth/LoginRequest.php`

```php
// Línea 65
if ($response->getScore() < 0.5) { // Cambia 0.5 según necesites
```

- **0.3-0.5**: Más permisivo, menos falsos positivos
- **0.5-0.7**: Balance recomendado
- **0.7-1.0**: Más restrictivo, más seguro pero puede bloquear algunos usuarios legítimos

## Verificar que funciona

1. Abre tu navegador y ve a la página de login
2. En la esquina inferior derecha deberías ver el badge de reCAPTCHA
3. Intenta iniciar sesión
4. Si todo está configurado correctamente, el login funcionará normalmente
5. Los intentos sospechosos serán bloqueados automáticamente

## Solución de problemas

### El badge de reCAPTCHA no aparece
- Verifica que `VITE_RECAPTCHA_SITE_KEY` esté configurado en `.env`
- Ejecuta `npm run dev` o `npm run build`
- Limpia la caché del navegador

### Error: "La verificación de seguridad falló"
- Verifica que `RECAPTCHA_SECRET_KEY` esté correctamente configurada
- Asegúrate de que el dominio esté agregado en la consola de Google reCAPTCHA
- Revisa los logs en `storage/logs/laravel.log`

### Modo de desarrollo sin claves
Si no tienes las claves configuradas, el sistema registrará una advertencia en los logs pero permitirá el login. Esto es útil para desarrollo, pero **NUNCA** dejes las claves vacías en producción.

## Seguridad adicional

reCAPTCHA v3 complementa otras medidas de seguridad ya implementadas:
- Rate limiting (máximo 5 intentos)
- CSRF protection
- Validación de credenciales
- Regeneración de sesión

## Recursos

- [Documentación oficial de reCAPTCHA v3](https://developers.google.com/recaptcha/docs/v3)
- [Consola de administración](https://www.google.com/recaptcha/admin)
- [FAQ de reCAPTCHA](https://developers.google.com/recaptcha/docs/faq)
