Autenticação
Autenticação
Seção intitulada “Autenticação”O Juca usa NextAuth v5 (Auth.js) para autenticação com sessões baseadas em JWT. Dois provedores de autenticação estão configurados: Google OAuth e magic links via Resend (e-mail).
Configuração
Seção intitulada “Configuração”O sistema de autenticação é definido em src/lib/auth.ts:
// Exportsexport const { handlers, auth, signIn, signOut } = NextAuth({ providers: [Google, Resend], session: { strategy: 'jwt' }, pages: { signIn: '/auth/signin' }, // ...});Variáveis de ambiente obrigatórias para produção:
| Variável | Propósito |
|---|---|
GOOGLE_CLIENT_ID | Client ID do Google OAuth |
GOOGLE_CLIENT_SECRET | Client secret do Google OAuth |
AUTH_SECRET | Segredo JWT do NextAuth |
RESEND_API_KEY | Chave de API do Resend para e-mails de magic link |
AUTH_EMAIL_FROM | E-mail de remetente para magic links |
ADMIN_EMAILS | Lista de e-mails de administradores separados por vírgula |
Bypass para Desenvolvimento
Seção intitulada “Bypass para Desenvolvimento”Para desenvolvimento local, defina ENABLE_DEV_AUTH=true para ignorar a autenticação completamente. Isso retorna um usuário dev fixo:
// Usuário dev retornado quando ENABLE_DEV_AUTH=true{ id: 'dev-user', email: 'dev@localhost', name: 'Dev User', role: 'admin' }Padrões de Auth no Código
Seção intitulada “Padrões de Auth no Código”O Juca usa dois padrões distintos de autenticação dependendo do contexto:
Server Actions
Seção intitulada “Server Actions”import { requireActionAuth } from '@/actions/utils';
// Em qualquer server action:const user = await requireActionAuth();// Lança erro se não autenticado (exceto se ENABLE_DEV_AUTH=true)Rotas de API
Seção intitulada “Rotas de API”// Em qualquer handler de rota de API:import { auth } from '@/lib/auth';
export async function GET(request: Request) { const session = await auth(); if (!session?.user) return new Response('Unauthorized', { status: 401 }); // ...}Role de Administrador
Seção intitulada “Role de Administrador”Os usuários administradores são determinados pela variável de ambiente ADMIN_EMAILS (separados por vírgula, sem distinção de maiúsculas/minúsculas). A função isAdmin() verifica a pertinência, e o callback do JWT adiciona um campo role ao token.
Middleware
Seção intitulada “Middleware”O middleware de autenticação (src/middleware.ts) protege todas as rotas exceto assets estáticos e o endpoint de health check:
export { auth as middleware } from '@/lib/auth';
export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico|icons|manifest.json|sw.js).*)']};Componentes
Seção intitulada “Componentes”| Componente | Localização | Propósito |
|---|---|---|
AuthProvider | src/components/auth/AuthProvider.tsx | Wrapper do SessionProvider do NextAuth |
| Página de login | src/app/auth/signin/page.tsx | UI de login personalizada |