fix: improve type safety in NextAuth callbacks (remove any, add explanatory comments)

This commit is contained in:
2026-06-07 00:08:11 +02:00
parent 38dc6efc09
commit 44b3b4dd8d
+11 -4
View File
@@ -15,15 +15,20 @@ export const authOptions: NextAuthOptions = {
callbacks: { callbacks: {
async jwt({ token, user }) { async jwt({ token, user }) {
if (user) { if (user) {
token.role = (user as any).role // NextAuth v4 : les types de base n'incluent pas les champs custom.
token.id = user.id // 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 return token
}, },
async session({ session, token }) { async session({ session, token }) {
if (session.user) { if (session.user) {
(session.user as any).role = token.role // session.user est déjà augmenté via next-auth.d.ts (id + role)
;(session.user as any).id = token.id session.user.id = token.id as string
session.user.role = token.role as string
} }
return session return session
}, },
@@ -38,6 +43,8 @@ export const authOptions: NextAuthOptions = {
async authorize(credentials, req) { async authorize(credentials, req) {
if (!credentials?.email || !credentials?.password) return null 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 = const ip =
(req as any)?.headers?.['x-forwarded-for']?.split(',')[0]?.trim() ?? 'unknown' (req as any)?.headers?.['x-forwarded-for']?.split(',')[0]?.trim() ?? 'unknown'
const key = `${ip}:${credentials.email}` const key = `${ip}:${credentials.email}`