Intégration Auth0 avec Next.js
Ajoutez l'authentification à vos applications Next.js en utilisant @auth0/nextjs-auth0. Prend en charge à la fois App Router et Pages Router.
Prérequis
- Application Next.js 13+ (App Router ou Pages Router)
- Compte Auth0 et application configurée
- Si vous n'avez pas encore configuré Auth0, utilisez d'abord la skill
auth0-quickstart
Quand NE PAS l'utiliser
- Applications React côté client uniquement - Utilisez
auth0-reactpour les SPAs Vite/CRA - Applications mobiles React Native - Utilisez
auth0-react-nativepour iOS/Android - Frameworks non-Next.js - Utilisez les SDKs spécifiques au framework (Express, Vue, Angular, etc.)
- APIs sans état uniquement - Utilisez la validation JWT middleware si vous n'avez pas besoin de gestion de session
Workflow de démarrage rapide
1. Installer le SDK
npm install @auth0/nextjs-auth0
2. Configurer l'environnement
Pour une configuration automatisée avec Auth0 CLI, consultez le Setup Guide pour les scripts complets.
Pour une configuration manuelle :
Créez .env.local :
AUTH0_SECRET=<generate-a-32-character-secret>
APP_BASE_URL=http://localhost:3000
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
Générer le secret : openssl rand -hex 32
Important : Ajoutez .env.local à .gitignore
3. Créer le client Auth0 et le middleware
Détecter la structure du projet d'abord : Vérifiez si le projet utilise un répertoire src/ (c'est-à-dire si src/app/ ou src/pages/ existe). Ceci détermine où placer les fichiers :
- Avec
src/:src/lib/auth0.ts,src/middleware.ts(ousrc/proxy.tspour Next.js 16) - Sans
src/:lib/auth0.ts,middleware.ts(ouproxy.tspour Next.js 16)
Créez lib/auth0.ts (ou src/lib/auth0.ts si vous utilisez la convention src/) :
import { Auth0Client } from '@auth0/nextjs-auth0/server';
export const auth0 = new Auth0Client({
domain: process.env.AUTH0_DOMAIN!,
clientId: process.env.AUTH0_CLIENT_ID!,
clientSecret: process.env.AUTH0_CLIENT_SECRET!,
secret: process.env.AUTH0_SECRET!,
appBaseUrl: process.env.APP_BASE_URL!,
});
Configuration du middleware (Next.js 15 vs 16) :
Next.js 15 - Créez middleware.ts (à la racine du projet, ou src/middleware.ts si vous utilisez src/) :
import { NextRequest } from 'next/server';
import { auth0 } from '@/lib/auth0';
export async function middleware(request: NextRequest) {
return await auth0.middleware(request);
}
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)',
],
};
Next.js 16 - Vous avez deux options :
Option 1 : Utilisez middleware.ts (identique à Next.js 15, mêmes règles de placement src/) :
import { NextRequest } from 'next/server';
import { auth0 } from '@/lib/auth0';
export async function middleware(request: NextRequest) {
return await auth0.middleware(request);
}
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)',
],
};
Option 2 : Utilisez proxy.ts (à la racine du projet, ou src/proxy.ts si vous utilisez src/) :
import { NextRequest } from 'next/server';
import { auth0 } from '@/lib/auth0';
export async function proxy(request: NextRequest) {
return await auth0.middleware(request);
}
export const config = {
matcher: [
'/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)',
],
};
Ceci crée automatiquement les endpoints :
/auth/login- Connexion/auth/logout- Déconnexion/auth/callback- Callback OAuth/auth/profile- Profil utilisateur
4. Ajouter le contexte utilisateur (Optionnel)
Remarque : En v4, l'encapsulation avec <Auth0Provider> est optionnelle. Nécessaire uniquement si vous voulez passer un utilisateur initial lors du rendu côté serveur à useUser().
App Router - Encapsulez optionnellement l'app dans app/layout.tsx :
import { Auth0Provider } from '@auth0/nextjs-auth0/client';
import { auth0 } from '@/lib/auth0';
export default async function RootLayout({ children }: { children: React.ReactNode }) {
const session = await auth0.getSession();
return (
<html>
<body>
<Auth0Provider user={session?.user}>{children}</Auth0Provider>
</body>
</html>
);
}
Pages Router - Encapsulez optionnellement l'app dans pages/_app.tsx :
import { Auth0Provider } from '@auth0/nextjs-auth0/client';
import type { AppProps } from 'next/app';
export default function App({ Component, pageProps }: AppProps) {
return (
<Auth0Provider user={pageProps.user}>
<Component {...pageProps} />
</Auth0Provider>
);
}
5. Ajouter l'interface d'authentification
Composant client (fonctionne dans les deux routers) :
'use client'; // Nécessaire uniquement pour App Router
import { useUser } from '@auth0/nextjs-auth0/client';
export default function Profile() {
const { user, isLoading } = useUser();
if (isLoading) return <div>Chargement...</div>;
if (user) {
return (
<div>
<img src={user.picture} alt={user.name} />
<h2>Bienvenue, {user.name}!</h2>
<a href="/auth/logout">Déconnexion</a>
</div>
);
}
return <a href="/auth/login">Connexion</a>;
}
6. Tester l'authentification
Démarrez votre serveur de développement :
npm run dev
Visitez http://localhost:3000 et testez le flux de connexion.
Documentation détaillée
- Setup Guide - Scripts de configuration automatisée, configuration de l'environnement, utilisation d'Auth0 CLI
- Integration Guide - Authentification côté serveur, routes protégées, routes API, middleware
- API Reference - API SDK complète, hooks, helpers, gestion de session
Erreurs courantes
| Erreur | Correction |
|---|---|
| Utiliser les variables d'environnement v3 | v4 utilise APP_BASE_URL et AUTH0_DOMAIN (pas AUTH0_BASE_URL ou AUTH0_ISSUER_BASE_URL) |
| Oublier d'ajouter l'URL de callback dans le Dashboard Auth0 | Ajoutez /auth/callback aux Allowed Callback URLs (ex. http://localhost:3000/auth/callback) |
| Configuration middleware manquante | v4 nécessite le middleware pour monter les routes auth - créez middleware.ts (Next.js 15+16) ou proxy.ts (Next.js 16 uniquement) avec auth0.middleware() |
| Mauvais chemins de route | v4 utilise /auth/login pas /api/auth/login - les routes perdent le préfixe /api |
| AUTH0_SECRET manquant ou faible | Générez un secret sécurisé avec openssl rand -hex 32 et stockez-le dans .env.local |
| Utiliser .env au lieu de .env.local | Next.js nécessite .env.local pour les secrets locaux, et .env.local doit être dans .gitignore |
| Application créée en type SPA dans Auth0 | Doit être du type Regular Web Application pour Next.js |
| Utiliser des helpers v3 supprimés | v4 a supprimé withPageAuthRequired et withApiAuthRequired - utilisez getSession() à la place |
| Utiliser useUser dans un Server Component | useUser est client uniquement, utilisez auth0.getSession() pour les Server Components |
| AUTH0_DOMAIN inclut https:// | AUTH0_DOMAIN v4 doit être juste le domaine (ex. example.auth0.com), sans schéma |
Skills connexes
auth0-quickstart- Configuration basique Auth0auth0-migration- Migrer depuis un autre fournisseur d'authauth0-mfa- Ajouter l'authentification multifacteur
Référence rapide
Configuration V4 :
- Détecter la convention
src/: vérifier sisrc/app/ousrc/pages/existe — placer tous les fichiers danssrc/si c'est le cas - Créer
lib/auth0.ts(ousrc/lib/auth0.ts) avec une instanceAuth0Client - Créer la configuration du middleware (obligatoire) :
- Next.js 15 :
middleware.ts(ousrc/middleware.ts) avec la fonctionmiddleware() - Next.js 16 :
middleware.tsavec la fonctionmiddleware()OUproxy.tsavec la fonctionproxy()(mêmes règlessrc/)
- Next.js 15 :
- Optionnel : Encapsulez avec
<Auth0Provider>pour l'utilisateur SSR
Hooks côté client :
useUser()- Obtenir l'utilisateur dans les composants clientsuser- Objet du profil utilisateurisLoading- État de chargement
Méthodes côté serveur :
auth0.getSession()- Obtenir la session dans les Server Components/routes API/middlewareauth0.getAccessToken()- Obtenir le token d'accès pour appeler les APIs
Cas d'usage courants :
- Liens connexion/déconnexion → Utilisez les chemins
/auth/loginet/auth/logout(voir Étape 5) - Pages protégées (App Router) → Integration Guide
- Pages protégées (Pages Router) → Integration Guide
- Routes API avec auth → Integration Guide
- Protection middleware → Integration Guide