From 5472043a33a9a71aa4a7a935e7d1bd7742f45aff Mon Sep 17 00:00:00 2001 From: markosbenitez Date: Sun, 28 Jun 2026 02:04:36 -0300 Subject: [PATCH] fix(ops): setup_first_admin.sql usa email_confirmed_at (GoTrue v2.189.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Esquema real verificado en producción (information_schema.columns): auth.users tiene tanto confirmed_at como email_confirmed_at — ambas son columnas reales, así que el INSERT con confirmed_at nunca falló por columna inexistente (por eso el usuario test-e2e se creó sin error). Pero el login seguía rechazando con "Email o contraseña incorrectos" incluso después de confirmar que el usuario existía — GoTrue valida email_confirmed_at para permitir login por password, no confirmed_at. Dejar confirmed_at solo creaba un usuario que nunca queda "confirmado" para efectos de auth. Agregado comentario documentando la versión de GoTrue verificada y cómo re-verificar el schema si esto vuelve a cambiar. --- scripts/setup_first_admin.sql | 47 +++++++++++++---------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/scripts/setup_first_admin.sql b/scripts/setup_first_admin.sql index f3dfcfa..34ad706 100644 --- a/scripts/setup_first_admin.sql +++ b/scripts/setup_first_admin.sql @@ -1,6 +1,13 @@ -- ============================================================ -- Script: crear primer usuario platform_admin -- +-- Verificado contra GoTrue v2.189.0 (supabase/gotrue:v2.189.0) +-- Schema de auth.users puede variar entre versiones de GoTrue. +-- Si falla con "column does not exist", verificar el schema real: +-- SELECT column_name FROM information_schema.columns +-- WHERE table_schema='auth' AND table_name='users' +-- ORDER BY ordinal_position; +-- -- USO: -- docker exec -i supabase-db psql -U postgres -d postgres \ -- -v email='admin@ejemplo.com' -v password='CAMBIAR' \ @@ -16,43 +23,23 @@ WITH new_user AS ( INSERT INTO auth.users ( - id, - instance_id, - aud, - role, - email, - encrypted_password, - confirmed_at, - created_at, - updated_at, - raw_app_meta_data, - raw_user_meta_data, - confirmation_token, - recovery_token, - email_change_token_new, - email_change, + id, instance_id, aud, role, email, encrypted_password, + email_confirmed_at, created_at, updated_at, + raw_app_meta_data, raw_user_meta_data, + confirmation_token, recovery_token, + email_change_token_new, email_change, is_super_admin ) VALUES ( gen_random_uuid(), '00000000-0000-0000-0000-000000000000', - 'authenticated', - 'authenticated', + 'authenticated', 'authenticated', :'email', extensions.crypt(:'password', extensions.gen_salt('bf')), - now(), - now(), - now(), + now(), now(), now(), '{"provider":"email","providers":["email"]}', - '{}', - '', - '', - '', - '', - false - ) - RETURNING id, email + '{}', '', '', '', '', false + ) RETURNING id ) INSERT INTO public.user_roles (user_id, app_role, org_id) SELECT id, 'platform_admin', '10000000-0000-0000-0000-000000000002' -FROM new_user -RETURNING (SELECT email FROM new_user), user_id; +FROM new_user;