Depuis Next.js 15, la gestion de l'authentification est devenue plus robuste et flexible, notamment grâce à ses composants de serveur avancés, son API Actions et ses capacités middleware. Dans cet article, nous explorerons les meilleures pratiques pour implémenter l'authentification dans une application Next.js 15, couvrant des sujets essentiels tels que les composants du serveur, le middleware, les actions et la gestion de session.
Next.js 15 améliore les capacités de rendu côté serveur et introduit de nouveaux outils pour gérer l'authentification, notamment dans le contexte des composants serveur et de l'API Actions. Avec les composants serveur, vous pouvez gérer en toute sécurité l'authentification sur le serveur sans exposer les données sensibles au client, tandis que l'API Actions permet une communication transparente avec le serveur. Le middleware peut aider à protéger les itinéraires et à vérifier dynamiquement les autorisations des utilisateurs, rendant ainsi le flux d'authentification plus sécurisé et plus convivial.
Pour commencer, choisissez une stratégie d'authentification adaptée à votre application. Les approches courantes incluent :
Pour les applications nécessitant OAuth, Next.js s'intègre bien à next-auth, ce qui simplifie la gestion des sessions et des jetons.
npm install next-auth
Configurez-le dans la configuration Next.js 15 en utilisant /app/api/auth/[...nextauth]/route.ts :
// /app/api/auth/[...nextauth]/route.ts import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, }), ], pages: { signIn: "/auth/signin", }, }; export default NextAuth(authOptions);
Dans Next.js 15, les composants du serveur vous permettent de restituer les composants sur le serveur et de contrôler l'accès aux données en toute sécurité.
Récupération de la session utilisateur dans les composants du serveur : cela réduit la dépendance à l'égard de l'état côté client et évite d'exposer des données sensibles dans le client. Vous pouvez récupérer les données de session utilisateur directement dans un composant serveur.
Exemple de vérification d'authentification côté serveur dans le composant serveur :
// /app/dashboard/page.tsx import { getServerSession } from "next-auth/next"; import { authOptions } from "../api/auth/[...nextauth]/route"; import { redirect } from "next/navigation"; export default async function DashboardPage() { const session = await getServerSession(authOptions); if (!session) { redirect("/auth/signin"); } return ( <div> <h1>Welcome, {session.user?.name}</h1> </div> ); }
Ici, getServerSession récupère les données de session de l'utilisateur en toute sécurité sur le serveur. S'il n'y a pas de session valide, la fonction de redirection renvoie l'utilisateur vers la page de connexion.
L'API Actions dans Next.js 15 fournit un moyen d'interagir avec les fonctions du serveur directement depuis le client. Ceci est particulièrement utile pour les actions de connexion, de déconnexion et d’enregistrement.
npm install next-auth
// /app/api/auth/[...nextauth]/route.ts import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, }), ], pages: { signIn: "/auth/signin", }, }; export default NextAuth(authOptions);
La loginAction est définie de manière sécurisée comme une action du serveur et le client peut la déclencher sans exposer de données sensibles.
Le middleware de Next.js 15 fournit un moyen puissant de protéger les routes en vérifiant l'état d'authentification sur le serveur avant de charger les pages.
Pour sécuriser des pages comme /dashboard et /profile, créez un middleware dans middleware.ts.
// /app/dashboard/page.tsx import { getServerSession } from "next-auth/next"; import { authOptions } from "../api/auth/[...nextauth]/route"; import { redirect } from "next/navigation"; export default async function DashboardPage() { const session = await getServerSession(authOptions); if (!session) { redirect("/auth/signin"); } return ( <div> <h1>Welcome, {session.user?.name}</h1> </div> ); }
Le maintien de sessions sécurisées et la protection des données utilisateur sont essentiels dans tout flux d'authentification.
Utiliser des cookies HTTP uniquement pour le stockage des jetons :
Jetons d'expiration et d'actualisation de session :
Contrôle d'accès basé sur les rôles (RBAC) :
Protection contre la falsification de requêtes intersites (CSRF) :
En-têtes sécurisés et HTTPS :
Next.js 15 apporte des outils et des composants robustes pour gérer l'authentification en toute sécurité. L'exploitation des composants du serveur, des actions et du middleware garantit que les données sensibles sont protégées sur le serveur et réduit les risques d'exposition des informations au client.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!