Projet développement web
Mon Vieux Grimoire
API REST sécurisée avec Node.js, Express et MongoDB pour gérer des livres et leurs utilisateurs.
Stack technique
Contexte
Mon Vieux Grimoire est une application de référencement et de notation de livres. Le projet consistait à construire l’API back-end permettant de gérer les livres, les utilisateurs et leurs interactions, avec une attention particulière portée à la sécurité et à la gestion des données.
Objectifs
- Développer une API REST avec Node.js et Express.
- Connecter l’application à une base MongoDB.
- Gérer les opérations CRUD sur les livres.
- Mettre en place l’authentification utilisateur et protéger les routes sensibles.
- Sécuriser les mots de passe.
- Gérer l’upload et l’optimisation des images.
- Vérifier que seul le propriétaire d’un livre peut le modifier ou le supprimer.
- Valider les données côté serveur.
Architecture et composants
- Routes
- Middlewares
- Contrôleurs
- Modèles Mongoose
- MongoDB
Les routes dirigent les requêtes vers les middlewares, qui appliquent notamment l’authentification. Les contrôleurs portent la logique métier et s’appuient sur les modèles Mongoose pour structurer et enregistrer les données dans MongoDB.
Fonctionnalités
- Création de compte et connexion utilisateur.
- Génération d’un token JWT.
- Récupération, ajout, modification et suppression de livres.
- Upload et optimisation des images.
- Système de notation et calcul de la note moyenne.
- Contrôle du propriétaire pour les opérations sensibles.
Challenge principal
Sécuriser les opérations de modification et de suppression en vérifiant à la fois l’authentification de l’utilisateur et sa propriété sur la ressource. Être connecté identifie l’utilisateur grâce au token JWT ; avoir le droit de modifier un livre précis nécessite ensuite que le contrôleur vérifie que son identifiant correspond au propriétaire de ce livre.
Solution apportée
La solution repose sur un middleware d’authentification qui vérifie le JWT et récupère l’utilisateur authentifié. Le contrôleur vérifie ensuite le propriétaire de la ressource. Les modèles Mongoose structurent les données, bcrypt hash les mots de passe, Multer reçoit les images et Sharp les optimise, avec validation et gestion des erreurs côté serveur.
Sécurité
- Mots de passe hashés avec bcrypt.
- Routes protégées par authentification.
- JWT pour identifier l’utilisateur authentifié.
- Contrôle du propriétaire avant les modifications et suppressions.
- Validation des données côté serveur.
Résultats
- L’API permet de gérer les utilisateurs et les livres de manière structurée, avec des routes protégées et un contrôle d’autorisation sur les opérations sensibles.
Améliorations possibles
- Ajouter des tests automatisés d’API.
- Renforcer la validation des entrées.
- Centraliser davantage la gestion des erreurs.
- Mettre en place un rate limiting.
- Améliorer les logs et la supervision.
- Documenter l’API avec OpenAPI / Swagger.