• 10 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/12/24

Configurez le middleware d'authentification

Implémentez le middleware d'authentification

Nous allons à présent créer le middleware qui va vérifier que l’utilisateur est bien connecté et transmettre les informations de connexion aux différentes méthodes qui vont gérer les requêtes.

Créez un dossier middleware et un fichier auth.js à l'intérieur :

const jwt = require('jsonwebtoken');
 
module.exports = (req, res, next) => {
   try {
       const token = req.headers.authorization.split(' ')[1];
       const decodedToken = jwt.verify(token, 'RANDOM_TOKEN_SECRET');
       const userId = decodedToken.userId;
       req.auth = {
           userId: userId
       };
	next();
   } catch(error) {
       res.status(401).json({ error });
   }
};

Dans ce middleware :

  • Étant donné que de nombreux problèmes peuvent se produire, nous insérons tout à l'intérieur d'un bloc try...catch.

  • Nous extrayons le token du header Authorization de la requête entrante. N'oubliez pas qu'il contiendra également le mot-clé Bearer. Nous utilisons donc la fonction split pour tout récupérer après l'espace dans le header. Les erreurs générées ici s'afficheront dans le bloc catch.

  • Nous utilisons ensuite la fonction verify pour décoder notre token. Si celui-ci n'est pas valide, une erreur sera générée.

  • Nous extrayons l'ID utilisateur de notre token et le rajoutons à l’objet Request afin que nos différentes routes puissent l’exploiter.

  • Dans le cas contraire, tout fonctionne et notre utilisateur est authentifié. Nous passons à l'exécution à l'aide de la fonction next().

Maintenant, nous devons appliquer ce middleware à nos routes stuff, qui sont celles à protéger. Dans notre routeur stuff, nous importons notre middleware et le passons comme argument aux routes à protéger :

const express = require('express');
const router = express.Router();

const auth = require('../middleware/auth');

const stuffCtrl = require('../controllers/stuff');

router.get('/', auth, stuffCtrl.getAllStuff);
router.post('/', auth, stuffCtrl.createThing);
router.get('/:id', auth, stuffCtrl.getOneThing);
router.put('/:id', auth, stuffCtrl.modifyThing);
router.delete('/:id', auth, stuffCtrl.deleteThing);

module.exports = router;

 Désormais, à partir du front-end, vous devriez être capable de vous connecter et d'utiliser normalement l'application. Pour vérifier que les requêtes non autorisées ne fonctionnent pas, vous pouvez utiliser une application (telle que Postman) pour passer une demande sans en-tête Authorization. L'API refusera l'accès et renverra une réponse 401.

Félicitations ! Votre API implémente à présent l'authentification par token et est correctement sécurisée. 

En résumé

  • La méthode verify() du package jsonwebtoken permet de vérifier la validité d'un token (sur une requête entrante, par exemple).

  • Ajoutez bien votre middleware d'authentification dans le bon ordre sur les bonnes routes.

  • Attention aux failles de sécurité !

Qu'avez-vous appris dans cette partie du cours ?

  • Vous avez ajouté un modèle de données User afin de stocker les informations utilisateur dans votre base de données.

  • Vous avez implémenté le cryptage de mot de passe sécurisé afin de stocker en toute sécurité les mots de passe utilisateur.

  • Vous avez créé et envoyé des tokens au front-end pour authentifier les requêtes.

  • Vous avez ajouté le middleware d'authentification pour sécuriser les routes dans votre API. De cette façon, seules les requêtes authentifiées seront gérées.

 Dans la dernière partie de ce cours, vous en apprendrez plus sur la gestion des fichiers :

  • comment capturer les fichiers provenant du front-end ;

  • comment les enregistrer sur votre serveur ;

  • comment les supprimer lorsqu'ils ne sont plus nécessaires.

Example of certificate of achievement
Example of certificate of achievement