Snippet compartilhadoemanuelVINI0105 de junho de 2026

auth

Importado de: https://github.com/emanuelVINI01/snippetvault/blob/main/src/auth.ts

TypeScript
import
typescript
1import NextAuth from "next-auth";
2import GitHub from "next-auth/providers/github";
3import { PrismaAdapter } from "@auth/prisma-adapter";
4import { prisma } from "./prisma";
5
6export const { handlers, auth, signIn, signOut } = NextAuth({
7  adapter: PrismaAdapter(prisma),
8  providers: [
9    GitHub({
10      clientId: process.env.AUTH_GITHUB_ID,
11      clientSecret: process.env.AUTH_GITHUB_SECRET,
12      profile(profile) {
13        return {
14          id: profile.id.toString(),
15          name: profile.login,
16          email: profile.email,
17          image: profile.avatar_url,
18        };
19      },
20    }),
21  ],
22  callbacks: {
23    session({ session, user }) {
24      if (session.user) {
25        session.user.id = user.id;
26      }
27      return session;
28    },
29  },
30});
31

Análise de Inteligência Artificial

Explicação

Configuração de autenticação utilizando NextAuth com provedor GitHub e adaptador Prisma.

Descrição sugerida

Este arquivo centraliza a lógica de autenticação da aplicação, integrando o NextAuth v5 com o Prisma para persistência de dados. Ele define o provedor GitHub para login social e customiza o mapeamento do perfil do usuário e a sessão para incluir o ID do banco de dados.

Linguagem e tags

TypeScript

#NextAuth#Prisma#GitHub OAuth#Autenticação#Next.js#TypeScript

Bugs e melhorias

Falta de validação de variáveis de ambientemedium

O código assume que AUTH_GITHUB_ID e AUTH_GITHUB_SECRET estão presentes. Se estiverem ausentes, a aplicação falhará silenciosamente ou lançará erro em tempo de execução ao tentar autenticar.

Tipagem da Sessãolow

O TypeScript pode emitir alertas sobre a propriedade 'id' não existir no tipo padrão de 'session.user' sem um arquivo de declaração de tipos (module augmentation).

Refatoração sugerida

  • Adicionada verificação básica para variáveis de ambiente obrigatórias.
  • Utilização de arrow functions para maior concisão nos callbacks.
  • Melhoria na legibilidade da estrutura de configuração.
import NextAuth from "next-auth"; import GitHub from "next-auth/providers/github"; import { PrismaAdapter } from "@auth/prisma-adapter"; import { prisma } from "./prisma"; const githubId = process.env.AUTH_GITHUB_ID; const githubSecret = process.env.AUTH_GITHUB_SECRET; if (!githubId || !githubSecret) { console.warn("Aviso: Credenciais do GitHub não configuradas."); } export const { handlers, auth, signIn, signOut } = NextAuth({ adapter: PrismaAdapter(prisma), providers: [ GitHub({ clientId: githubId, clientSecret: githubSecret, profile: (profile) => ({ id: profile.id.toString(), name: profile.login, email: profile.email, image: profile.avatar_url }), }), ], callbacks: { session: ({ session, user }) => { if (session.user) session.user.id = user.id; return session; }, }, });

Uso do objeto auth em Server Components

Este exemplo demonstra como recuperar a sessão do lado do servidor de forma segura usando a função auth exportada.

import { auth } from "./auth"; export default async function ProfilePage() { const session = await auth(); if (!session) return <p>Não autenticado</p>; return <div>Olá, {session.user?.name} (ID: {session.user?.id})</div>; }