Autenticação é difícil. Cookies, CSRF, Sessões, Encriptação... Implementar isso do zero é pedir para ser hackeado.
O Auth.js (antigo NextAuth) abstrai tudo isso. Na versão 5, ele se tornou agnóstico a framework (roda em Svelte, Vue, etc), mas a integração com Next.js continua perfeita.
Configuração Básica
Tudo gira em torno do arquivo auth.ts.
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { auth, handlers, signIn, signOut } = NextAuth({
providers: [GitHub],
callbacks: {
authorized: async ({ auth }) => {
// Logica de proteção de rotas (Middleware)
return !!auth
},
},
})
Protegendo Rotas (Middleware)
No Next.js, não precisamos verificar sessão em cada página. O Middleware faz isso globalmente.
export { auth as middleware } from "@/auth"
Acesso no Server Component
import { auth } from "@/auth"
export default async function Page() {
const session = await auth()
if (!session) return <p>Acesso Negado</p>
return <p>Olá, {session.user.name}</p>
}
Simples, tipado e seguro por padrão.