Aller au contenu principal

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

  1. Initialisation du Service :

    • Une instance de AuthService est créée pour gérer la vérification des droits d'accès.
  2. Vérification des Droits :

    • La méthode verifyUser du service AuthService 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.
  3. 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).

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

  1. Requête Entrante :

    • Un utilisateur envoie une requête HTTP à une route protégée.
  2. 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.
  3. 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.