90 lines
2.6 KiB
Markdown
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.
|