Files
motor-de-encuestas/scripts/setup_first_admin.sql
markosbenitez 5472043a33 fix(ops): setup_first_admin.sql usa email_confirmed_at (GoTrue v2.189.0)
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.
2026-06-28 02:04:36 -03:00

46 lines
1.8 KiB
SQL

-- ============================================================
-- 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' \
-- < scripts/setup_first_admin.sql
--
-- NOTA: las variables psql solo funcionan en SQL plano, no en DO $$.
-- Este script usa un CTE INSERT...RETURNING para encadenar ambos inserts.
--
-- CAMBIAR CONTRASEÑA LUEGO DEL PRIMER LOGIN:
-- docker exec -i supabase-db psql -U postgres -d postgres \
-- -c "UPDATE auth.users SET encrypted_password = extensions.crypt('NuevaContraseña', extensions.gen_salt('bf')) WHERE email = 'admin@ejemplo.com';"
-- ============================================================
WITH new_user AS (
INSERT INTO auth.users (
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',
:'email',
extensions.crypt(:'password', extensions.gen_salt('bf')),
now(), now(), now(),
'{"provider":"email","providers":["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;