Auth Middleware
Description Générale
Le fichier auth.middleware.ts
contient un middleware Express utilisé pour vérifier si un utilisateur est authentifié avant d'accéder à certaines routes protégées. Ce middleware repose sur le service AuthService
pour valider les droits d'accès de l'utilisateur.
Fonctionnalités Principales
1. Vérification de l'Authentification
Le middleware utilise la méthode verifyUser
du service AuthService
pour vérifier si l'utilisateur est connecté et possède les droits nécessaires pour accéder à la ressource demandée.
2. Blocage des Accès Non Autorisés
Si l'utilisateur n'est pas authentifié ou ne possède pas les droits requis, le middleware renvoie une réponse d'erreur et empêche l'accès à la route suivante.
3. Passage au Contrôleur
Si l'utilisateur est authentifié et possède les droits nécessaires, le middleware appelle la fonction next()
pour permettre l'exécution du contrôleur ou du middleware suivant.
Exemple de Code
Middleware authMiddleware
import { AuthService } from "../api/auth/auth.service";
/**
* Ce middleware permet de vérifier si l'utilisateur est connecté.
* Si l'utilisateur n'est pas connecté, une erreur est renvoyée, voir {@link AuthService.verifyUser}.
* @category Middlewares
*/
export const authMiddleware = async (req, res, next) => {
const authService = new AuthService();
// Vérification des droits de l'utilisateur
const hasRights = await authService.verifyUser(req, res);
if (!hasRights) return;
next();
};
Fonctionnement
-
Initialisation du Service :
- Une instance de
AuthService
est créée pour gérer la vérification des droits d'accès.
- Une instance de
-
Vérification des Droits :
- La méthode
verifyUser
du serviceAuthService
est appelée avec la requête et la réponse en paramètres. - Cette méthode extrait le token d'authentification de la requête, le valide, et ajoute les informations de l'utilisateur à
res.locals.user
si le token est valide.
- La méthode
-
Gestion des Accès :
- Si l'utilisateur est authentifié, la fonction
next()
est appelée pour passer au middleware ou au contrôleur suivant. - Si l'utilisateur n'est pas authentifié, une réponse d'erreur est renvoyée (par exemple, statut HTTP 401 ou 403).
- Si l'utilisateur est authentifié, la fonction
Exemple d'Utilisation
Application du Middleware à une Route
Le middleware peut être appliqué à une ou plusieurs routes pour les protéger.
Exemple :
import express from "express";
import { authMiddleware } from "./middlewares/auth.middleware";
import { AlgosController } from "./api/algos/algos.controller";
const app = express();
const algosController = new AlgosController();
// Appliquer le middleware à toutes les routes du contrôleur
app.use("/algos", authMiddleware, algosController.router);
// Exemple de route protégée
app.get("/protected", authMiddleware, (req, res) => {
res.json({ message: "Vous êtes authentifié !" });
});
Points Techniques
1. Utilisation de AuthService
Le middleware délègue la logique de vérification au service AuthService
, ce qui garantit une séparation claire des responsabilités :
- Le middleware se concentre sur la gestion des accès.
- Le service gère la logique métier liée à l'authentification.
2. Ajout d'Informations à la Requête
Si l'utilisateur est authentifié, ses informations sont ajoutées à res.locals.user
. Cela permet aux contrôleurs ou middlewares suivants d'accéder facilement aux données de l'utilisateur.
3. Gestion des Erreurs
Si l'utilisateur n'est pas authentifié ou si une erreur survient lors de la vérification, une réponse d'erreur est renvoyée sans exécuter les contrôleurs ou middlewares suivants.
Exemple de Flux
-
Requête Entrante :
- Un utilisateur envoie une requête HTTP à une route protégée.
-
Exécution du Middleware :
- Le middleware extrait le token d'authentification de la requête.
- Le service
AuthService
valide le token et vérifie les droits de l'utilisateur.
-
Résultat :
- Si l'utilisateur est authentifié, la requête est transmise au contrôleur ou middleware suivant.
- Sinon, une réponse d'erreur est renvoyée.