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.
46 lines
1.8 KiB
SQL
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;
|