Por que não usei NextAuth e implementei JWT do zero no BloodLink
Essa decisão gerou mais questionamento do que qualquer outra no projeto. Então vou explicar o raciocínio.
O BloodLink tem dois tipos de usuário com comportamentos muito diferentes: quem cria campanhas (hospitais, famílias) e quem se candidata como doador. O fluxo de autenticação precisa refletir isso.
Por que não NextAuth
NextAuth é excelente para o caso padrão: login com Google, GitHub, email magico, sessão gerenciada. Se o seu projeto se encaixa nisso, use sem hesitar.
O BloodLink precisava de algumas coisas que tornariam o NextAuth mais complicado do que fazer do zero:
- Tokens com payload customizado (tipo de usuário, permissões específicas por campanha)
- Controle explícito sobre expiração e renovação de sessão
- Lógica de autorização granular: o criador de uma campanha tem permissões diferentes de um doador inscrito na mesma campanha
O NextAuth resolve isso, mas com adaptadores e callbacks que eu precisaria entender a fundo de qualquer forma. A curva seria parecida.
O que eu fiz
JWT assinado com HS256, armazenado em cookie httpOnly com SameSite=Strict. Middleware no Next.js que valida o token e injeta o usuário no contexto da requisição. Refresh token com rotação.
Menos de 200 linhas no total.
O que eu abri mão
Login social. Não tem Google nem GitHub. Por enquanto não faz falta, mas é a limitação mais visível dessa escolha.
Se o projeto crescer e login social virar demanda real, vou precisar integrar. Mas construir para um requisito que não existe ainda não faz sentido.