<?php // models/UsuarioModel.php class Usuario { private $conn; private $table = 'usuarios'; public $id; public $cedula; public $password; public $nombre; public $rol; public function __construct($db) { $this->conn = $db; } // Función para validar login con contraseñas en TEXTO PLANO public function autenticar($cedula, $password) { try { // Query para buscar por cédula $query = "SELECT id, cedula, password, nombre, rol FROM " . $this->table . " WHERE cedula = :cedula LIMIT 1"; $stmt = $this->conn->prepare($query); $stmt->bindParam(':cedula', $cedula); $stmt->execute(); if($stmt->rowCount() > 0) { $row = $stmt->fetch(PDO::FETCH_ASSOC); // ✅ COMPARACIÓN EN TEXTO PLANO (sin encriptar) // Comparamos directamente la contraseña ingresada con la de la BD if($password === $row['password']) { $this->id = $row['id']; $this->cedula = $row['cedula']; $this->nombre = $row['nombre']; $this->rol = $row['rol']; return true; } // Si quieres agregar logging para debug: error_log("Intento de login fallido para cédula: " . $cedula); } else { error_log("Cédula no encontrada: " . $cedula); } return false; } catch(PDOException $e) { error_log("Error en autenticación: " . $e->getMessage()); return false; } } // ⚠️ FUNCIÓN PARA MIGRAR A CONTRASEÑAS SEGURAS (OPCIONAL) // Usa esto cuando quieras empezar a encriptar las contraseñas public function migrarAPasswordHash($cedula, $passwordActual) { try { // Primero verificar que la contraseña actual es correcta $query = "SELECT id, password FROM " . $this->table . " WHERE cedula = :cedula LIMIT 1"; $stmt = $this->conn->prepare($query); $stmt->bindParam(':cedula', $cedula); $stmt->execute(); if($stmt->rowCount() > 0) { $row = $stmt->fetch(PDO::FETCH_ASSOC); // Si la contraseña actual coincide if($passwordActual === $row['password']) { // Crear hash seguro $hashedPassword = password_hash($passwordActual, PASSWORD_DEFAULT); // Actualizar en la base de datos $updateQuery = "UPDATE " . $this->table . " SET password = :password WHERE id = :id"; $updateStmt = $this->conn->prepare($updateQuery); $updateStmt->bindParam(':password', $hashedPassword); $updateStmt->bindParam(':id', $row['id']); return $updateStmt->execute(); } } return false; } catch(PDOException $e) { error_log("Error al migrar contraseña: " . $e->getMessage()); return false; } } // Función para crear un nuevo usuario con contraseña en texto plano public function crear($cedula, $nombre, $password, $rol = 'admin') { try { $query = "INSERT INTO " . $this->table . " (cedula, nombre, password, rol) VALUES (:cedula, :nombre, :password, :rol)"; $stmt = $this->conn->prepare($query); // ⚠️ GUARDANDO EN TEXTO PLANO (coincide con tu BD actual) // Si quieres guardar encriptado, usa: $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $stmt->bindParam(':cedula', $cedula); $stmt->bindParam(':nombre', $nombre); $stmt->bindParam(':password', $password); // Texto plano $stmt->bindParam(':rol', $rol); if($stmt->execute()) { return $this->conn->lastInsertId(); } return false; } catch(PDOException $e) { error_log("Error al crear usuario: " . $e->getMessage()); return false; } } // Función para actualizar contraseña (texto plano) public function actualizarPassword($cedula, $nuevaPassword) { try { $query = "UPDATE " . $this->table . " SET password = :password WHERE cedula = :cedula"; $stmt = $this->conn->prepare($query); $stmt->bindParam(':password', $nuevaPassword); // Texto plano $stmt->bindParam(':cedula', $cedula); return $stmt->execute(); } catch(PDOException $e) { error_log("Error al actualizar contraseña: " . $e->getMessage()); return false; } } } ?>