Capítulo 295 de 456
Autenticação no Pages Router se divide em três conceitos: Authentication (verificar identidade), Session Management (manter estado entre requests) e Authorization (controlar acesso); a doc recomenda usar uma lib de auth pronta em vez de solução 100% custom.
/api/auth/login), que chama o provider (signIn('credentials', ...)).httpOnly+secure corretos.import { serialize } from 'cookie'
import { encrypt } from '@/app/lib/session'
export default function handler(req: NextApiRequest, res: NextApiResponse) {
const sessionData = req.body
const encryptedSessionData = encrypt(sessionData)
const cookie = serialize('session', encryptedSessionData, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
maxAge: 60 * 60 * 24 * 7,
path: '/',
})
res.setHeader('Set-Cookie', cookie)
res.status(200).json({ message: 'Successfully set cookie!' })
}
httpOnly+secure+maxAge corretos.export default async function proxy(req: NextRequest) {
const path = req.nextUrl.pathname
const isProtectedRoute = protectedRoutes.includes(path)
const cookie = (await cookies()).get('session')?.value
const session = await decrypt(cookie)
if (isProtectedRoute && !session?.userId) {
return NextResponse.redirect(new URL('/login', req.nextUrl))
}
return NextResponse.next()
}
| Tipo de sessão | Onde vive o dado | Segurança | Complexidade |
|---|---|---|---|
| Stateless | Cookie do browser | Menor (se mal implementada) | Baixa |
| Database | Banco, browser só tem ID | Maior | Alta |
| Tipo de check de autorização | Fonte | Uso |
|---|---|---|
| Optimistic | Cookie | UI rápida, redirect em Proxy |
| Secure | Banco (via DAL) | Dados sensíveis, ações reais |
httpOnly e secure em produção.