Semaine 2
Lors de cette séance on va ajouter une base de données (BDD) à notre service pour pouvoir stocker nos utilisateurs.
Une fois la BDD connectée on modifiera notre controller User
pour qu'il puisse l'utiliser.
Base de données
Je vous invite à lire la partie sur les bases de données dans le cours Ici
Vous devrez ajouter une table User
dans la BDD avec les champs suivant:
- Id : Id dans la base
- Pseudo : Pseudo de l'utilisateur
- Password : Mot de passe de l'utilisateur
- Role : Le rôle de l'utilisateur (User, Admin)
Modifiez votre classe User
en conséquence.
Utiliser la BDD dans un controller
Vous injecterez votre contexte BDD dans le controller User
pour pouvoir accéder a la BDD.
Vous modifierez ensuite les méthodes de votre controller pour qu'elles utilisent la BDD.
A la fin de cette séance votre controller devra être capable de:
- Récupérer un utilisateur par son id
- Récupérer un utilisateur par son pseudo et son mot de passe
- Ajouter un utilisateur
- Modifier un utilisateur (Pseudo, Role, Password)
- Supprimer un utilisateur
Voici la liste des endpoints que le controller devra fournir:
GET /api/User/{id} // Renvoi l'utilisateur correspondant à l'id
POST /api/User/login // Renvoi l'utilisateur si le pseudo et le mot de passe sont correct
POST /api/User/register // Ajoute un utilisateur en base de donnée et le renvoi
PUT /api/User/{id} // Modifie un utilisateur
DELETE /api/User/{id} // Supprime un utilisateur
La route PUT /api/user/{id}
prendra en paramètre un objet UserUpdate
qui sera une classe qui hérite de UserInfo et lui ajoute le champ Role
.
Hasher les mots de passe
Il est important de ne pas stocker les mots de passe en clair dans la BDD. Pour cela on va hasher les mots de passe avant de les stocker.
Je vous invite à lire la partie sur le password hasher dans le cours Ici
Pour utiliser le password hasher, vous devrez l'injecter dans votre controller User
.
Pour savoir comment faire, consultez le cours sur l'injection de dépendance Ici
Quand un utilisateur s'enregistre, vous devrez hasher son mot de passe avant de le stocker dans la BDD. Puis quand un utilisateur se connecte, vous devrez verifier que le mot de passe donné correspond bien au mot de passe hashé en BDD.
Bonus
Ajoutez une méthode pour récupérer tous les utilisateurs de la BDD Ajoutez une méthode pour récupérer tous les utilisateurs admin de la BDD Ajoutez une méthode pour récupérer tous les utilisateurs dont le nom contient une chaîne de caractères donnée
Voici les endpoints correspondant:
GET /api/User // Renvoi tous les utilisateurs mais sans les mots de passe
GET /api/User/admin // Renvoi tous les utilisateurs admin
GET /api/User/search/{name} // Renvoi tous les utilisateurs dont le pseudo contient `name`