Modelo de Segurança
Autenticação
A autenticação é gerenciada pelo Better Auth com adapter Prisma (PostgreSQL).
Provedores
Email + Senha
signIn.email() / signUp.email()
Google OAuth
signIn.social({ provider: 'google' })
GitHub OAuth
signIn.social({ provider: 'github' })
Vinculação de Contas
Quando um usuário faz login com um provedor OAuth e o email já existe, o Better Auth automaticamente vincula a nova conta ao usuário existente. Isso significa que um usuário que se cadastrou com email/senha pode depois fazer login com Google (se o email for o mesmo) sem criar uma conta duplicada.
Gerenciamento de Sessão
Armazenamento de sessão: PostgreSQL (tabela
sessions)Transporte: Cookie HTTP-only (
session_token)Cache de cookie: 5 minutos (Better Auth lê do cookie ao invés de consultar o DB em cada request)
Tempo de vida da sessão: Gerenciado pelo Better Auth (configurável via
expiresAt)
Autenticação no Código
A autenticação acontece na camada Route via getAuthSession():
Toda rota protegida chama isso antes de invocar o Service:
Tratamento de Senhas
Senhas são hasheadas com bcrypt pelo Better Auth antes do armazenamento
A aplicação nunca vê ou manipula senhas brutas — Better Auth gerencia o fluxo completo
Hashes de senhas são armazenados na tabela
accounts(providerId: 'credentials')
E-mail de Boas-vindas
Na criação do usuário, um databaseHook dispara um e-mail de boas-vindas via Resend. Isso é fire-and-forget — falhas no e-mail são logadas mas não bloqueiam o cadastro.
Arquivos Importantes
src/lib/auth.ts
Configuração do Better Auth no servidor
src/lib/auth-client.ts
Client do Better Auth para o browser
src/lib/auth-session.ts
getAuthSession() — validação de sessão no servidor
app/api/auth/[...all]/route.ts
Rota catch-all para endpoints do Better Auth
Atualizado