Autenticación · modules/iam

Adapter listo para producción

BetterAuth,
detrás de un port.

El auth es la parte que un repo en blanco shippea inseguro. UseDeploy cablea BetterAuth dentro del bounded context de IAM detrás de un port tipado IAuthProvider — con el hasher argon2id recomendado por OWASP, segundos factores de primera clase y sesiones por cookie desde el día uno.

Un adapter, todos los métodos

createBetterAuth cablea el adapter de sesión Prisma, el hasher argon2id respaldado por la API nativa de passwords de Bun, y los plugins de magic links, segundo factor y passkeys. Google OAuth se activa solo cuando su client id/secret están presentes.

better-auth.adapter.ts
 1  return betterAuth({
 2    database: prismaAdapter(prisma, { provider: 'postgresql' }),
 3    emailAndPassword: { enabled: true, password: argon2Hasher },
 4    socialProviders: cfg.google ? { google: cfg.google } : undefined,
 5    plugins: [
 6      magicLink({ sendMagicLink }),
 7      twoFactor({ /* TOTP */ }),
 8      passkey({ /* WebAuthn */ }),
 9    ],
10  });

Lo que tenés el día uno

Hashing de passwords con argon2id

Bun trae argon2id en el core — sin dependencia de npm. Es el default recomendado por OWASP para aplicaciones nuevas.

Magic links

Sign-in sin password vía un delivery hook que reenvía al proveedor de email configurado (o loguea el link en dev).

Segundo factor TOTP

El plugin de segundo factor da de alta apps autenticadoras y controla el sign-in con un paso twoFactorRedirect.

Passkeys (WebAuthn)

El plugin de passkey registra autenticadores de plataforma contra tu RP id / origin.

Google OAuth

El sign-in social se activa cuando GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET están seteados — el campo avatar se mapea al schema de Prisma así el alta social nunca falla.

Sesiones por cookie

Las sesiones son por cookie de punta a punta. El cliente manda las credenciales con withCredentials — sin bearer tokens en localStorage.

Referencia de configuración

Variables de entorno

  • BETTER_AUTH_SECRETrequerida

    min 32 chars

  • BETTER_AUTH_URLrequerida

    the server’s own URL

  • CORS_ORIGINSrequerida

    trusted browser origins

  • GOOGLE_CLIENT_IDopcional

    enables Google OAuth

  • GOOGLE_CLIENT_SECRETopcional

Dónde vive

  • apps/server/src/modules/iam/infrastructure/auth/better-auth.adapter.ts
  • apps/server/src/modules/iam/application/ports/auth-provider.ts

No dejes que tu agente escriba el auth desde cero.

Arrancá con 2FA, passkeys, magic links y OAuth ya cableados detrás de un port tipado — la parte que un repo en blanco shippea roto.