From 44b3b4dd8d352aa2e18bba4483df0b979e947754 Mon Sep 17 00:00:00 2001 From: Mathieu Date: Sun, 7 Jun 2026 00:08:11 +0200 Subject: [PATCH] fix: improve type safety in NextAuth callbacks (remove any, add explanatory comments) --- src/lib/auth.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 30999db..b08629f 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -15,15 +15,20 @@ export const authOptions: NextAuthOptions = { callbacks: { async jwt({ token, user }) { if (user) { - token.role = (user as any).role - token.id = user.id + // NextAuth v4 : les types de base n'incluent pas les champs custom. + // Le module augmentation dans next-auth.d.ts couvre le type Session/JWT + // mais pas le paramètre `user` du callback jwt. Cast nécessaire. + const u = user as typeof user & { role: string } + token.role = u.role + token.id = u.id } return token }, async session({ session, token }) { if (session.user) { - (session.user as any).role = token.role - ;(session.user as any).id = token.id + // session.user est déjà augmenté via next-auth.d.ts (id + role) + session.user.id = token.id as string + session.user.role = token.role as string } return session }, @@ -38,6 +43,8 @@ export const authOptions: NextAuthOptions = { async authorize(credentials, req) { if (!credentials?.email || !credentials?.password) return null + // NextAuth v4 : req est un RequestInternal partiel sans typings complets. + // Le cast est nécessaire pour accéder à x-forwarded-for. const ip = (req as any)?.headers?.['x-forwarded-for']?.split(',')[0]?.trim() ?? 'unknown' const key = `${ip}:${credentials.email}`