# 🔐 Sistema de Autenticación Segura para Monitor ## ✅ Instalación Completada Se ha implementado un sistema robusto de autenticación con verificación por email (2FA) para `monitor.php`. ## 📋 Archivos Creados/Modificados 1. **`insert.sql`** - SQL para crear tablas y datos iniciales 2. **`login.php`** - Sistema de login con verificación 2FA 3. **`monitor.php`** - Actualizado para requerir autenticación ## 🔧 Configuración Paso a Paso ### 1. Ejecutar el SQL en la base de datos Importa el archivo `insert.sql` en phpMyAdmin o ejecuta: ```bash mysql -u u418271893_spakanela -p u418271893_kanelaspa < insert.sql ``` ### 2. Configurar credenciales SMTP en la base de datos **IMPORTANTE:** Debes insertar la contraseña SMTP real. Ejecuta este SQL: ```sql UPDATE settings SET v = 'TU_PASSWORD_SMTP_REAL' WHERE k = 'SMTP_PASSWORD'; ``` Para obtener la contraseña SMTP de Hostinger: 1. Ve a hPanel → Email → Gestionar 2. Busca la cuenta `no-reply@mediacodehouse.com` 3. Si no existe, créala 4. Copia la contraseña ### 3. Usuarios Autorizados Por defecto, estos emails están autorizados: - ✅ `admin@mediacodehouse.com` - ✅ `soporte@mediacodehouse.com` - ✅ `kanelaspa@mediacodehouse.com` - ✅ `admonknelaspa@gmail.com` **Para agregar más usuarios:** ```sql INSERT INTO monitor_users (email, name, is_active) VALUES ('nuevo@email.com', 'Nombre Usuario', 1); ``` ### 4. Probar el Sistema 1. Abre en tu navegador: `https://tudominio.com/login.php` 2. Ingresa un email autorizado 3. Recibirás un código de 6 dígitos por email 4. El código expira en **30 minutos** 5. Ingresa el código para acceder a `monitor.php` 6. La sesión dura **2 horas** ## 🔒 Características de Seguridad ### ✅ Autenticación de 2 Factores (2FA) - Código de 6 dígitos enviado por email - Expira en 30 minutos - Solo se puede usar una vez ### ✅ Gestión de Sesiones - Token único por sesión - Expira en 2 horas de inactividad - Se registra IP y User Agent - Cierre de sesión manual ### ✅ Solo Usuarios Autorizados - Lista blanca en base de datos - Verificación de email - No se revela si un email está o no registrado ### ✅ Email Corporativo Seguro - SMTP con SSL (puerto 465) - Email HTML profesional - Remitente: `no-reply@mediacodehouse.com` ## 📊 Tablas Creadas ### `monitor_users` Usuarios autorizados a acceder al monitor ```sql - id (PK) - email (único) - name - is_active - created_at ``` ### `monitor_verification_codes` Códigos de verificación 2FA ```sql - id (PK) - user_id (FK) - code (6 dígitos) - expires_at (30 minutos) - used (booleano) - created_at ``` ### `monitor_sessions` Sesiones activas ```sql - id (PK) - session_token (único, 64 chars) - user_id (FK) - ip_address - user_agent - expires_at (2 horas) - created_at ``` ## 🎨 Interfaz de Usuario ### Login Page (`login.php`) - Diseño moderno y responsivo - Formulario de email - Formulario de código de verificación - Mensajes de error/éxito claros ### Monitor Page (`monitor.php`) - Header con información del usuario autenticado - Botón de cerrar sesión - Misma funcionalidad del monitor original ## 🛠️ Administración ### Ver usuarios activos ```sql SELECT * FROM monitor_users WHERE is_active = 1; ``` ### Desactivar un usuario ```sql UPDATE monitor_users SET is_active = 0 WHERE email = 'usuario@email.com'; ``` ### Ver sesiones activas ```sql SELECT s.*, u.email, u.name FROM monitor_sessions s JOIN monitor_users u ON s.user_id = u.id WHERE s.expires_at > NOW(); ``` ### Cerrar todas las sesiones de un usuario ```sql DELETE FROM monitor_sessions WHERE user_id = ( SELECT id FROM monitor_users WHERE email = 'usuario@email.com' ); ``` ### Limpiar códigos expirados (mantenimiento) ```sql DELETE FROM monitor_verification_codes WHERE expires_at < NOW(); ``` ### Limpiar sesiones expiradas (mantenimiento) ```sql DELETE FROM monitor_sessions WHERE expires_at < NOW(); ``` ## 🔍 Troubleshooting ### Email no llega 1. Verifica que la contraseña SMTP esté configurada correctamente 2. Revisa la carpeta de spam 3. Verifica que el email `no-reply@mediacodehouse.com` exista en Hostinger 4. Revisa los logs de errores de PHP: `error_log` ### Código inválido o expirado - Los códigos solo duran 30 minutos - Solicita un nuevo código desde login.php - Solo se pueden usar una vez ### Sesión expirada - Las sesiones duran 2 horas - Cierra sesión y vuelve a iniciar sesión ### Email no autorizado - Solo los emails en la tabla `monitor_users` con `is_active=1` pueden acceder - Agrega el email con el SQL de arriba ## 📧 Configuración SMTP de Hostinger Ya configurado en la base de datos: ``` Host: smtp.hostinger.com Puerto: 465 Encriptación: SSL Usuario: no-reply@mediacodehouse.com Contraseña: [CONFIGURAR EN settings] ``` ## 🚀 Próximos Pasos 1. ✅ Ejecutar `insert.sql` en la base de datos 2. ✅ Configurar password SMTP en tabla `settings` 3. ✅ Verificar que el email `no-reply@mediacodehouse.com` exista 4. ✅ Probar el login con un email autorizado 5. ✅ Cambiar los secretos en `.env` si aún tienes valores de ejemplo --- **Desarrollado por MediaCodeHouse** Sistema de Sincronización AgendaPro → Siigo para Kanela Spa