false, 'message' => 'Método no permitido. Use POST.' ]); exit(); } // Obtener datos del body (JSON) $input = json_decode(file_get_contents('php://input'), true); // Validar que se recibieron los datos necesarios (DNI en lugar de email) if (!isset($input['dni']) || !isset($input['codigo_seguridad'])) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Faltan campos obligatorios: dni y codigo_seguridad' ]); exit(); } // Sanitizar entradas $dni = strtoupper(trim($input['dni'])); // Convertir a mayúsculas para evitar problemas de case-sensitive $codigo_seguridad = trim($input['codigo_seguridad']); // Validar que el DNI no esté vacío if (empty($dni)) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'El DNI no puede estar vacío' ]); exit(); } try { // PASO 1: Buscar usuario por DNI $stmt = $pdo->prepare(" SELECT id, dni, nombre, apellidos, email, telefono, rol, estado, fecha_registro, codigo_seguridad FROM usuarios WHERE dni = :dni LIMIT 1 "); $stmt->execute([':dni' => $dni]); $usuario = $stmt->fetch(); // Si no se encontró el usuario if (!$usuario) { http_response_code(401); echo json_encode([ 'success' => false, 'message' => 'DNI o código de seguridad incorrectos' ]); exit(); } // PASO 2: Verificar el código de seguridad (contraseña) con bcrypt if (!password_verify($codigo_seguridad, $usuario['codigo_seguridad'])) { http_response_code(401); echo json_encode([ 'success' => false, 'message' => 'DNI o código de seguridad incorrectos' ]); exit(); } // PASO 3: Verificar que la cuenta esté activa if ($usuario['estado'] !== 'activo') { http_response_code(403); echo json_encode([ 'success' => false, 'message' => 'Cuenta ' . $usuario['estado'] . '. Contacte con administración.' ]); exit(); } // PASO 4: Actualizar último acceso $stmtUpdate = $pdo->prepare("UPDATE usuarios SET ultimo_acceso = NOW() WHERE id = :id"); $stmtUpdate->execute([':id' => $usuario['id']]); // PASO 5: Eliminar el codigo_seguridad de la respuesta (seguridad) unset($usuario['codigo_seguridad']); // Login exitoso echo json_encode([ 'success' => true, 'message' => 'Login correcto', 'data' => $usuario ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); } catch (PDOException $e) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Error en el servidor', 'error' => $e->getMessage() ]); } ?>