File "UsuarioModel.php"

Full Path: C:/wamp64/www/Seleccion/node_modules/safer-buffer/UsuarioModel.php
File size: 5.23 KB
MIME-type: text/x-php
Charset: utf-8

<?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;
        }
    }
}
?>