#Next JS

1 messages · Page 1 of 1 (latest)

polar gardenBOT
#

Hi @gloomy turret. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:

#

Bonjour ! Votre problème est courant : vous souhaitez utiliser Prisma dans le middleware Next.js, mais cela ne fonctionne pas car Prisma (et donc NextAuth.js avec PrismaAdapter) nécessite un environnement Node.js côté serveur, alors que le middleware Next.js s’exécute dans un environnement Edge Runtime, qui ne supporte pas toutes les APIs Node.js, y compris Prisma.

Pourquoi ça ne marche pas ?

  • Le middleware Next.js ne peut pas utiliser Prisma, car Prisma dépend de Node.js, alors que le middleware fonctionne dans un environnement Edge (plus limité, sans accès à toutes les fonctionnalités Node.js) source.
  • NextAuth.js avec PrismaAdapter fonctionne côté serveur (API routes, server actions), mais pas dans le middleware.

Que faire ?

  • Utilisez le middleware uniquement pour des vérifications simples (par exemple, vérifier la présence d’un cookie ou d’un token JWT).
  • Pour toute logique nécessitant Prisma (vérification de session, accès à la base de données), faites-le dans vos API routes ou server actions, jamais dans le middleware.
  • La documentation Next.js précise bien que le middleware ne doit pas être utilisé pour la gestion de session ou la sécurité principale, mais seulement pour des vérifications optimistes ou des redirections rapides source.

Exemple de ce qui est possible dans le middleware :

import { NextResponse } from 'next/server'

export function middleware(request) {
  const token = request.cookies.get('next-auth.session-token')
  if (!token) {
    return NextResponse.redirect(new URL('/login', request.url))
  }
  return NextResponse.next()
}

Mais ne tentez pas d’utiliser Prisma ici.

#

Résumé :
Faites vos vérifications d’authentification “profondes” (avec Prisma) dans vos API routes ou server actions, et gardez le middleware pour des contrôles très basiques (présence d’un cookie, redirection, etc.) source.

N’hésitez pas si vous avez besoin d’un exemple plus précis !

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: