‫- : Donc, après la mise à jour, permettons maintenant également à
‫l'utilisateur actuel de supprimer son compte.
‫Désormais, lorsqu'un utilisateur décide de supprimer son compte,
‫nous ne supprimons en fait pas ce document de la base de données.
‫Mais au lieu de cela, nous avons simplement défini le compte comme inactif.
‫Pour que l'utilisateur puisse à
‫un moment donné réactiver le compte et aussi pour que
‫nous puissions toujours accéder au compte à
‫l'avenir, même si officiellement, disons qu'il a été supprimé.
‫D'accord?
‫Donc, pour implémenter cela, nous
‫devons tout d'abord créer une nouvelle propriété dans notre schéma.
‫Alors, allons-y.
‫Et maintenant, nous voulons
‫avoir un champ appelé actif.
‫D'accord.
‫Qui devrait être du
‫type booléen.
‫D'accord, et par défaut,
‫ce
‫sera vrai.
‫Ainsi, tout utilisateur créé
‫est bien sûr un utilisateur actif
‫et le booléen est donc défini sur true.
‫De plus, nous ne voulons pas afficher cela dans la sortie, d'accord.
‫Parce que nous voulons
‫essentiellement cacher ce détail d'implémentation à l'utilisateur.
‫D'accord?
‫Et donc nous ne voulons pas que
‫quiconque sache que ce drapeau, donc ce drapeau actif est ici, d'accord.
‫Nous disons donc select, et le définissons sur false, d'accord.
‫Et donc,
‫pour supprimer l'utilisateur maintenant, tout ce
‫que nous avons à faire
‫est de définir cet indicateur actif sur false.
‫D'accord.
‫Créons donc cette fonction ici, les
‫exportations. deleteMe, c'était
‫donc updateMe et maintenant
‫c'est deleteMe et nous
‫savons
‫donc déjà que nous utilisons un catchAsync ici, n'est-ce pas ?
‫Et puis Async parce que nous
‫savons déjà que nous allons mettre à jour l'utilisateur.
‫Donc la demande
‫répond ensuite.
‫Alors,
‫attendez l'utilisateur. trouver par ID et mettre
‫à jour.
‫D'accord, et encore une fois, bien
‫sûr, il n'y a de travail que pour les
‫utilisateurs connectés et donc l'ID utilisateur est facilement stocké sur demande. utilisateur. identifiant.
‫et les données que nous voulons mettre à
‫jour sont
‫simplement actives et définissez-les sur false.
‫D'accord.
‫Maintenant, renvoyer la réponse est également assez facile.
‫Nous utilisons le
‫code 204 pour supprimé, ce qui fera en sorte qu'en réalité, dans Postman,
‫nous ne voyions même pas cette réponse, d'accord.
‫Mais nous l'envoyons toujours avec
‫la demande car c'est toujours la meilleure pratique.
‫Donc, c'est toujours un succès et n'oubliez pas
‫que nous n'envoyons aucune donnée.
‫Alors, réglez-le simplement sur non.
‫Très bien, et maintenant, bien sûr, ajoutez-le également
‫à tous les itinéraires ici.
‫Donc c'est assez similaire.
‫Donc deleteMe puis ici deleteMe aussi et maintenant
‫en fait, nous utilisons la
‫méthode delete http.
‫D'accord, et encore une fois,
‫nous ne supprimerons pas réellement un utilisateur de la base de données.
‫Mais tant que l'utilisateur n'est plus accessible nulle part, il est toujours
‫possible d'utiliser cette méthode http ici.
‫Très bien, alors essayons ça maintenant.
‫D'accord, même si nous ne sommes pas encore prêts
‫à 100 %, essayons quand même maintenant.
‫Très bien, alors, deleteMe et c'est
‫une route protégée et nous devons
‫donc être connectés et créons donc
‫notre
‫en-tête d'autorisation, Bearer
‫Token et bien
‫sûr celui-ci et c'est en fait tout.
‫Nous n'avons pas besoin de transmettre de données dans le corps.
‫Nous n'avons pas besoin de transmettre de données dans l'URL.
‫D'accord, car encore une fois, les seules données
‫nécessaires sont l'ID utilisateur actuel et celui-ci
‫n'est pas codé à l'intérieur de notre jeton Web adjacent.
‫D'accord?
‫Donc, ce que nous devons également faire, c'est supprimer et oui, cela
‫devrait fonctionner maintenant.
‫Donc, avant de faire cela, obtenons
‫en fait la liste de tous les utilisateurs.
‫Très bien et donc celui que nous supprimons maintenant
‫est ce dernier.
‫Donc celui-ci que nous venons de créer dans la dernière conférence.
‫D'accord, et nous
‫travaillons avec celui-ci car c'est le dernier qui s'est connecté
‫et c'est donc ce jeton ici qui est
‫actuellement stocké dans notre variable de jeton.
‫D'accord, et donc lorsque nous
‫supprimerons maintenant l'utilisateur, cela sera basé sur l'ID provenant de ce jeton.
‫Alors essayons ça maintenant.
‫Et effectivement nous obtenons notre 204.
‫Et maintenant, ce qui m'intéresse,
‫c'est de voir si la propriété select ici a changé.
‫Et en fait, c'est exactement la même chose ici.
‫Et c'est parce que nous ne
‫divulguons pas le champ de sélection à l'utilisateur.
‫Et donc nous avons réellement besoin de le voir ici.
‫D'accord et en effet, nous avons activé ici défini sur false.
‫Bon, c'est ce que je voulais dire avant.
‫Nous ne divulguons donc pas les champs actifs à
‫l'utilisateur, pas le champ de sélection.
‫Donc active n'est visible que pour nous ici dans
‫la boussole mais pas pour l'utilisateur.
‫Maintenant, comme dernière étape, nous ne
‫voulons bien sûr pas afficher les utilisateurs inactifs dans
‫cette sortie, n'est-ce pas.
‫Et comment pensez-vous que nous pourrions mettre cela en œuvre?
‫Eh bien, nous allons utiliser quelque chose qui remonte à loin
‫dont nous avons parlé il y a deux ou trois
‫sections, qui est un intergiciel de requête, d'accord.
‫Le middleware de requête est donc parfait pour
‫cela, car nous pouvons maintenant ajouter une
‫étape avant toute autre requête que nous effectuons
‫ensuite quelque part dans notre application.
‫Passons donc à notre modèle utilisateur ici
‫et ajoutons ce middleware ici.
‫Donc userSchema. pre, donc quelque chose qui se produira avant une requête et
‫cette requête sera une recherche.
‫D'accord, c'est donc ce qui rend ce middleware de requête.
‫Ensuite, une fonction normale car rappelez-vous que
‫sinon nous n'aurons pas accès au discord ou au
‫moins il n'aura pas la
‫valeur que nous attendons
‫de lui.
‫Et rappelez-vous qu'ici nous avons en fait utilisé une expression régulière
‫avant de dire essentiellement que
‫nous voulons que cette fonction middleware s'applique
‫à chaque requête qui commence par find.
‫Donc, pas seulement trouver, mais aussi des choses comme rechercher et
‫mettre à jour, rechercher et supprimer, et toutes les requêtes de ce type.
‫D'accord, et nous utilisons donc une expression régulière
‫pour rechercher des mots ou des chaînes commençant par find.
‫C'est donc ce que fait ce symbole ici.
‫Et puis terminez l'expression régulière.
‫Donc très simple.
‫C'est celui que même moi je peux écrire
‫sans aller d'abord sur Google et essayer
‫de le trouver là-bas.
‫D'accord, rappelez-vous qu'il s'agit d'un
‫middleware de requête et que cela pointe donc
‫vers la requête actuelle.
‫D'accord, et revenons donc rapidement ici
‫pour voir comment cela fonctionne.
‫Nous avons donc
‫notre obtenir tous les utilisateurs ici et ici, bien sûr, nous avons une requête de recherche.
‫Et maintenant, avant que cette
‫requête ne soit réellement exécutée, nous voulons y ajouter quelque chose.
‫C'est-à-dire que nous voulons uniquement trouver les documents dont
‫la propriété active est définie sur true.
‫D'accord, donc c'est facile.
‫C'est ici.
‫Et
‫donc ceci. find, puis bien sûr, notre objet de filtre ne contient que les documents dont
‫la valeur active est
‫définie sur true.
‫Et c'est tout.
‫Appelez le prochain middleware et nous avons terminé.
‫D'accord, et donc si nous faisons maintenant
‫la même requête, cette dernière ne devrait plus s'afficher car elle a encore une fois activé
‫la valeur false.
‫Et donc ça ne va pas correspondre à
‫la requête que nous venons d'écrire.
‫D'accord, maintenant nous n'avons aucun utilisateur ici
‫et je suppose que c'est parce que les autres n'ont
‫pas explicitement la propriété active définie
‫sur true.
‫Et donc faisons ce que nous avons fait dans cette autre section
‫où nous disons qu'active ne devrait pas être faux.
‫D'accord, nous utilisons donc
‫l'opérateur non égal à et cela
‫devrait bien sûr être dans son propre objet.
‫Donc pas égal à faux.
‫D'accord, c'est donc assez différent ici dans ce cas.
‫Très bien, donc tous les documents
‫où actif n'est pas égal à faux devraient maintenant apparaître et
‫les deux autres devraient maintenant être de retour.
‫Et en effet les voici.
‫D'accord et c'est ainsi que nous supprimons essentiellement nos
‫utilisateurs tout en ne les supprimant pas de la base de données.
‫D'accord, nous ne supprimons donc pas les documents,
‫nous les marquons seulement comme inactifs.
‫D'accord, enregistrons rapidement ceci ici.
‫Supprimer l'utilisateur
‫actuel.
‫Génial et avec cela, nous avons en
‫fait terminé la partie authentification et autorisation de
‫cette section.
‫Donc tout ce qui était lié à ces sujets et
‫aussi aux utilisateurs comme la mise à jour et la suppression d'utilisateurs.
‫Cela fait également partie de l'authentification
‫et de l'autorisation.
‫Maintenant, dans le reste de cette
‫section, nous allons parler de sécurité car bien sûr,
‫c'est aussi en quelque sorte lié
‫à l'authentification.
‫D'accord, nous allons
‫donc parler de quelques bonnes pratiques,
‫puis en implémenter certaines dans notre projet.