N10 — Exercices Authentification JWT

10 exercices progressifs · Valide en temps réel · Solutions incluses

EX 1

Créer un token JWT avec jwt.sign

Utilisez jwt.sign(payload, secret, options) pour créer un token avec un payload contenant userId et email, une expiration de 7 jours.

EX 2

Vérifier un token avec jwt.verify

Utilisez jwt.verify(token, secret) dans un bloc try/catch pour décoder un token et afficher son payload.

EX 3

Hacher un mot de passe avec bcrypt.hash

Utilisez await bcrypt.hash(password, 10) pour hacher un mot de passe. Affichez le hash résultant.

EX 4

Vérifier un mot de passe avec bcrypt.compare

Écrivez une fonction asynchrone qui utilise bcrypt.compare(motDePasse, hash) et retourne true ou false.

EX 5

Middleware verifyToken complet

Écrivez le middleware verifyToken(req, res, next) qui extrait le token du header Authorization: Bearer, le vérifie et attache le payload à req.user.

EX 6

Route login retournant un JWT

Écrivez une route POST /auth/login qui vérifie les identifiants avec bcrypt.compare et retourne un token JWT si valide.

EX 7

Route protégée avec verifyToken

Créez une route GET /auth/profile protégée par le middleware verifyToken. La route doit retourner les données de req.user.

EX 8

Extraire userId depuis req.user

Dans un handler de route protégée, extrayez userId et email depuis req.user et utilisez-les pour filtrer des données.

EX 9

Gestion de TokenExpiredError

Améliorez le middleware verifyToken pour distinguer TokenExpiredError (session expirée) des autres erreurs JWT (token corrompu/falsifié).

EX 10

Système d'authentification complet

Défi final : écrivez un système d'auth complet avec register, login, et verifyToken. Le code doit inclure jwt.sign, bcrypt.hash et la vérification du header Authorization.

← Cours N10 Mini-projet →