Projet 6 du parcours "Développeur web" d'OpenClassrooms - Construisez une API sécurisée pour une application d'avis gastronomiques
Créer un MVP appelé “Piquante”, permettant aux utilisateurs d’ajouter leurs sauces préférées et de liker ou disliker les sauces ajoutées par les autres utilisateurs. Développer la partie back-end de l'application.
- Node
npm
Créer un dossier racine dans lequel, il faudra ajouter le dossier du frontend et celui du backend :
-
Pour le Frontend
- Se rendre sur le lien de la partie frontend de l'application https://github.com/OpenClassrooms-Student-Center/dwj-projet6
- Cloner le projet dans le dossier racine
- Ouvrir le terminal et se déplacer dans le dossier créé
- Exécuter
npm install
- Installer les packages prérequis tels que
npm install --save @angular/cli@7.0.2
pour rendre l'application fonctionnelle - Exécuter
npm start
pour accéder au serveur de développement
-
Pour le Backend (ce repository)
- Cloner le projet dans le dossier racine
- Ouvrir le terminal et se déplacer dans le dossier créé
- exécuter
npm install
- exécuter
npm start
- Créer un fichier
.env
dans lequel il faut ajouterSESSION_SECRET
en suivant l'exemple comme dans le fichier.env.example
Pour connecter l'application à la base de données (avec 1 ou 2 droits administrateur) :
- Première façon en utilisant ma base de données :
- Me demander mes codes
DB_USER
etDB_ADMIN
- Modifier la ligne 17 du fichier
app.js
, en choisissant entreprocess.env.DB_USER
etprocess.env.DB_ADMIN
- Me demander mes codes
- Deuxième façon en utilisant votre propre base de données :
- Créer un fichier
.env
dans il faudra ajouterDB_URI
en suivant l'exemple comme dans le fichier.env.example
- Modifier la ligne 17 du fichier
app.js
, en passant deprocess.env.DB_USER
àprocess.env.DB_URI
- Créer un fichier
- Troisième façon en utilisant votre propre base de données :
- Créer 2 droits administrateur sur MongoDB :
- un rôle readWriteAnyDatabase
- un rôle readWrite
- Créer un fichier
.env
dans il faudra ajouter :DB_ADMIN
en suivant l'exemple comme dans le fichier.env.example
et en utilisant le<userName>
correspondant à l'utilisateur ayant le rôle readWriteAnyDatabaseDB_USER
en suivant l'exemple comme dans le fichier.env.example
et en utilisant le<userName>
correspondant à l'utilisateur ayant le rôle readWrite
- Modifier la ligne 17 du fichier
app.js
, en choisissant entreprocess.env.DB_USER
etprocess.env.DB_ADMIN
- Créer 2 droits administrateur sur MongoDB :
Se rendre sur http://localhost:4200 via le navigateur
Technologies |
---|
Framework: Express |
Serveur: NodeJS |
Base de données: MongoDB |
Toutes les opérations de la base de données :
- doivent utiliser le pack Mongoose avec des schémas de données stricts
Toutes les routes relatives à la sauce doivent exiger une demande authentifiée (contenant un jeton valide dans son en-tête d'autorisation : "Bearer ")
Toute erreur doit être renvoyée telle quelle :
- sans aucune modification ni ajout
- si nécessaire, utiliser une nouvelle Erreur().
-
Utilisateur :
- userId: string — identifiant unique MongoDB pour l'utilisateur qui a créé la sauce
- email: string — adresse électronique de l'utilisateur [unique]
- password: string — hachage du mot de passe de l'utilisateur
-
Sauce :
- id: ObjectID — identifiant unique créé par MongoDB
- userId: string — identifiant unique MongoDB pour l'utilisateur qui a créé la sauce
- name: string — nom de la sauce
- manufacturer: string — fabricant de la sauce
- description: string — description de la sauce
- mainPepper: string — principal ingrédient dans la sauce
- imageUrl: string — string de l'image de la sauce téléchargée par l'utilisateur
- heat: number — nombre entre 1 et 10 décrivant la sauce
- likes: number — nombre d'utilisateurs qui aiment la sauce
- dislikes: number — nombre d'utilisateurs qui n'aiment pas la sauce
- usersLiked: [string] — tableau d'identifiants d'utilisateurs ayant aimé la sauce
- usersDisliked: [string] — tableau d'identifiants d'utilisateurs n'ayant pas aimé la sauce
Le nombre de likes/dislikes et les tableaux like/dislike doivent être mis à jour pour mettre en œuvre la fonctionnalité.
- l’API doit respecter le RGPD et les standards OWASP
- le mot de passe des utilisateurs doit être chiffré
- 2 types de droits administrateur à la base de données doivent être définis :
- un accès pour supprimer ou modifier des tables
- un accès pour éditer le contenu de la base de données
- la sécurité de la base de données MongoDB (à partir d’un service tel que MongoDB Atlas) doit être faite de telle sorte que le validateur puisse lancer l’application depuis sa machine
- l’authentification doit être renforcée sur les routes requises
- les mots de passe doivent être stockés de manière sécurisée
- les adresses mails de la base de données :
- sont uniques
- un plugin Mongoose approprié est utilisé pour s’assurer de leur caractère unique et rapporter des erreurs
- Utiliser des méthodes de masquage du côté API et base de données pour protéger les données personnelles des utilisateurs
Pour plus de détails sur les instructions de ce projet :