Files
Oxicloud/ISSUE_45_SOLUTION.md
T
2025-04-10 01:43:25 +02:00

2.6 KiB

Solución para el issue #45: [BUG] Admin already exists?

Descripción del problema

Al intentar configurar un usuario administrador, algunos usuarios reciben el error:

2025-04-09T14:01:26.733566Z ERROR oxicloud::interfaces::api::handlers::auth_handler: Registration failed for user admin: Already Exists: El usuario 'admin' ya existe

Causa raíz

Este problema ocurre debido a cómo está implementada la migración de datos inicial. En el archivo migrations/20250408000001_default_users.sql, el sistema intenta crear un usuario admin por defecto durante la migración inicial, pero:

  1. Si luego el usuario intenta crear manualmente otro usuario con nombre "admin", el sistema detecta el conflicto.
  2. La cláusula ON CONFLICT (id) DO NOTHING solo previene conflictos en el ID, no en el nombre de usuario.

Solución implementada

Hemos realizado los siguientes cambios:

  1. Modificado migrations/20250408000001_default_users.sql para comprobar primero si el usuario "admin" ya existe:
-- Check if admin user already exists before creating it
DO $$$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM auth.users WHERE username = 'admin') THEN
        -- Create admin user (password: Admin123!)
        INSERT INTO auth.users (
            id, 
            username, 
            ...
        ) VALUES (...);
    END IF;
END;
$$$;
  1. Creado un script scripts/reset_admin.sql que puede ejecutarse para eliminar el usuario admin existente:
-- Set the correct schema
SET search_path TO auth;

-- Delete the admin user if it exists
DELETE FROM auth.users WHERE username = 'admin';

-- Output remaining users for verification
SELECT username, email, role FROM auth.users ORDER BY role, username;
  1. Actualizado la documentación en doc/DATABASE-MIGRATIONS.md con instrucciones detalladas para resolver este problema.

Instrucciones para usuarios afectados

Si encuentras el error "Admin already exists", tienes dos opciones:

Opción 1: Usar el script proporcionado

cat scripts/reset_admin.sql | docker exec -i oxicloud-postgres-1 psql -U postgres -d oxicloud

Opción 2: Hacerlo manualmente

  1. Conéctate al contenedor de PostgreSQL:
# Encuentra el contenedor
docker ps
# Ejemplo: oxicloud-postgres-1
docker exec -it oxicloud-postgres-1 bash
  1. Conéctate a la base de datos:
psql -U postgres -d oxicloud
  1. Borra el usuario admin existente:
SET search_path TO auth;
DELETE FROM auth.users WHERE username = 'admin';
  1. Verifica que se eliminó correctamente:
SELECT username, email, role FROM auth.users;
  1. Sal y registra un nuevo usuario admin a través de la interfaz web.