Autenticação · modules/iam

Adapter pronto para produção

BetterAuth,
atrás de um port.

O auth é a parte que um repo em branco publica inseguro. A UseDeploy conecta o BetterAuth dentro do bounded context de IAM atrás de um port tipado IAuthProvider — com o hasher argon2id recomendado pela OWASP, segundos fatores de primeira classe e sessões por cookie desde o dia um.

Um adapter, todos os métodos

createBetterAuth conecta o adapter de sessão Prisma, o hasher argon2id apoiado na API nativa de senhas do Bun, e os plugins de magic links, segundo fator e passkeys. O Google OAuth só liga quando seu client id/secret estão 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  });

O que você tem no dia um

Hashing de senha com argon2id

O Bun traz argon2id no core — sem dependência de npm. É o padrão recomendado pela OWASP para aplicações novas.

Magic links

Sign-in sem senha via um delivery hook que encaminha para o provider de email configurado (ou loga o link em dev).

Segundo fator TOTP

O plugin de segundo fator registra apps autenticadores e controla o sign-in com um passo twoFactorRedirect.

Passkeys (WebAuthn)

O plugin de passkey registra autenticadores de plataforma contra o seu RP id / origin.

Google OAuth

O sign-in social liga quando GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET estão setados — o campo avatar é mapeado no schema do Prisma para que a criação social nunca falhe.

Sessões por cookie

As sessões são por cookie de ponta a ponta. O cliente envia as credenciais com withCredentials — sem bearer tokens no localStorage.

Referência de configuração

Variáveis de ambiente

  • BETTER_AUTH_SECRETobrigatória

    min 32 chars

  • BETTER_AUTH_URLobrigatória

    the server’s own URL

  • CORS_ORIGINSobrigatória

    trusted browser origins

  • GOOGLE_CLIENT_IDopcional

    enables Google OAuth

  • GOOGLE_CLIENT_SECRETopcional

Onde ele vive

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

Não deixe seu agente escrever o auth do zero.

Comece com 2FA, passkeys, magic links e OAuth já conectados atrás de um port tipado — a parte que um repo em branco publica quebrada.