auth
Importado de: https://github.com/emanuelVINI01/snippetvault/blob/main/src/auth.ts
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});
31Aná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
Bugs e melhorias
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.
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>; }