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

90 lines
2.6 KiB
Markdown

# 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:
```sql
-- 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;
$$$;
```
2. Creado un script `scripts/reset_admin.sql` que puede ejecutarse para eliminar el usuario admin existente:
```sql
-- 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;
```
3. 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
```bash
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:
```bash
# Encuentra el contenedor
docker ps
# Ejemplo: oxicloud-postgres-1
docker exec -it oxicloud-postgres-1 bash
```
2. Conéctate a la base de datos:
```bash
psql -U postgres -d oxicloud
```
3. Borra el usuario admin existente:
```sql
SET search_path TO auth;
DELETE FROM auth.users WHERE username = 'admin';
```
4. Verifica que se eliminó correctamente:
```sql
SELECT username, email, role FROM auth.users;
```
5. Sal y registra un nuevo usuario admin a través de la interfaz web.