2.6 KiB
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:
- Si luego el usuario intenta crear manualmente otro usuario con nombre "admin", el sistema detecta el conflicto.
- La cláusula
ON CONFLICT (id) DO NOTHINGsolo previene conflictos en el ID, no en el nombre de usuario.
Solución implementada
Hemos realizado los siguientes cambios:
- Modificado
migrations/20250408000001_default_users.sqlpara 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;
$$$;
- Creado un script
scripts/reset_admin.sqlque 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;
- Actualizado la documentación en
doc/DATABASE-MIGRATIONS.mdcon 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
- Conéctate al contenedor de PostgreSQL:
# Encuentra el contenedor
docker ps
# Ejemplo: oxicloud-postgres-1
docker exec -it oxicloud-postgres-1 bash
- Conéctate a la base de datos:
psql -U postgres -d oxicloud
- Borra el usuario admin existente:
SET search_path TO auth;
DELETE FROM auth.users WHERE username = 'admin';
- Verifica que se eliminó correctamente:
SELECT username, email, role FROM auth.users;
- Sal y registra un nuevo usuario admin a través de la interfaz web.