‫Narrateur : Bienvenue à la dernière vidéo de cette section.
‫Et dans celui-ci,
‫nous allons empêcher la pollution des
‫paramètres, en utilisant encore un autre package NPM.
‫Mais avant d'installer ce
‫package, examinons l'erreur.
‫Mais avant de faire cela, passons à Postman et
‫voyons pourquoi nous devons
‫en fait empêcher la pollution des paramètres en premier lieu.
‫Donc, tout d'abord, nous devons nous connecter.
‫Bon, donc, avec cet utilisateur et ce mot de passe.
‫Nous pouvons donc maintenant utiliser l'itinéraire Get All Tours.
‫Très bien, et donc ce que je
‫vais faire maintenant, c'est d'ajouter des paramètres à la chaîne de requête.
‫Alors voyons, je veux trier par durée, et
‫en même temps, je veux aussi trier par prix.
‫Et cela n'a pas vraiment de sens parce
‫que nous sommes prêts à n'avoir qu'un seul paramètre de tri.
‫Voyons donc ce que nous obtenons réellement avec cela.
‫Et en effet, nous obtenons une erreur disant que this. chaîne de requête. sorte. split n'est pas une fonction.
‫Et c'est ce qui se passe dans les apiFeatures. js à la ligne 23.
‫Alors ouvrons cela et donc ici, à la ligne 23, c'est là
‫que cette erreur se produit.
‫Il essaie donc de diviser la propriété sort ici, que
‫nous attendons d'être une chaîne.
‫Mais pour le moment, puisque nous l'avons
‫défini deux fois, donc triez une fois puis triez deux fois, express
‫créera en fait un tableau avec ces deux valeurs, durée et prix.
‫Permettez-moi de vous montrer cela.
‫Console. Journal.
‫Maintenant, je le copie.
‫D'accord, réessayez.
‫Voici la même erreur et comme
‫je l'ai dit, il s'agit en fait d'un tableau avec durée et prix.
‫Et pour que bien sûr, nous ne puissions pas diviser parce que la division
‫ne fonctionne que sur les chaînes, d'accord ?
‫C'est donc un problème typique que
‫les attaquants peuvent ensuite utiliser.
‫Très bien, et donc en gros, nous
‫allons maintenant utiliser un middleware qui supprimera simplement ces
‫champs en double, d'accord ?
‫Et celui-là, installons-le.
‫Il s'appelle
‫HPP qui signifie HTTP Parameter pollution.
‫D'accord.
‫Exigons-le rapidement ici.
‫Très bien, et donc, c'est encore un autre très simple.
‫Tout ce que nous devons faire, c'est app. utiliser puis appeler HPP.
‫Donc, évitez la pollution des paramètres.
‫Et celui-ci devrait encore être utilisé ici à la
‫fin, d'accord, car il clarifie la chaîne
‫de requête, d'accord ?
‫Essayons donc à nouveau.
‫Cela prend un peu de temps, et c'est parti.
‫L'erreur a donc disparu et maintenant, elle n'utilise
‫que la dernière.
‫Donc c'est trier mon prix maintenant
‫et en effet nous commençons par le plus bas,
‫puis nous remontons 497, jusqu'au plus cher de près
‫de 3000, d'accord ?
‫C'est donc en quelque sorte corrigé, mais nous voulons en fait des propriétés ou
‫des champs en double dans certains cas, n'est-ce pas ?
‫Par exemple, nous pourrions vouloir rechercher des circuits d'une
‫durée de neuf et cinq.
‫Alors rappelez-vous que dans notre API, nous
‫pouvons faire cela, donc la durée est égale à cinq, et
‫nous pouvons dire, en même temps, la durée neuf, d'accord ?
‫Et nous voulons que cela fonctionne, mais pour le moment, ce n'est pas le cas.
‫Il ne trouve que la tournée avec neuf jours, non?
‫Mais si nous ne l'avions pas fait, ou un middleware HPP.
‫Désactivons-le donc.
‫Donc, si nous ne l'avions pas activé,
‫nous trouverions trois tournées, une avec une
‫durée de cinq, puis ici avec une durée de neuf et ici une autre
‫avec une durée de cinq.
‫D'accord, et donc dans ce cas, c'est en
‫fait le comportement attendu.
‫Alors, que pouvons-nous faire pour pouvoir utiliser le
‫middleware tout en obtenant
‫ce résultat que nous attendons ici, avec
‫la durée, nous pouvons lister certains paramètres, d'accord ?
‫Donc, dans cette fonction HPP, nous pouvons à nouveau
‫passer un objet, puis là-dedans, spécifier la liste blanche, d'accord ?
‫Et la liste blanche est simplement un tableau de propriétés pour lesquelles
‫nous autorisons en fait les doublons dans la chaîne de requête.
‫D'accord?
‫Et la durée en fait bien sûr partie, d'accord ?
‫Alors, essayons à nouveau.
‫Et donc, en ce moment, nous obtenons toujours nos trois résultats comme avant.
‫Mais si nous l'essayions avec sort, créons un
‫nouvel onglet ici.
‫Donc, si nous l'avons essayé avec ces
‫doubles tris, nous ne devrions pas non plus obtenir d'erreur.
‫Eh bien, maintenant, nous n'avons pas été connectés, alors
‫récupérons notre jeton d'erreur ici.
‫Essayez à nouveau.
‫Et maintenant, en effet, cela fonctionne, nous n'obtenons aucune erreur.
‫Et pour que le middleware HPP fasse son travail.
‫D'accord?
‫Fermez également celui-ci,
‫et maintenant nous devons également spécifier d'autres champs
‫dans notre liste blanche, car par exemple
‫nous voulons également rechercher celui-ci, ou la quantité d'évaluations.
‫Et donc, copions-les tous ici dans notre liste blanche.
‫Donc la moyenne aussi.
‫Ensuite, la durée que
‫nous avons déjà, et disons la taille maximale du groupe.
‫Nous pourrions aussi vouloir la difficulté.
‫Et aussi le prix.
‫Et je pense que cela devrait alors suffire.
‫D'accord.
‫Et cela peut
‫sembler un peu étrange de mettre manuellement tous les noms de champs ici et plus
‫tard, nous devrons peut-être faire la même chose pour les autres
‫ressources, ce qui rendra cette liste blanche encore plus grande, n'est-ce pas ?
‫Et bien sûr, nous pourrions faire des choses complexes ici afin
‫d'obtenir ces noms de champs à partir du modèle
‫lui-même, mais encore une fois,
‫je veux juste rester simple ici, d'accord ?
‫Et donc je définis manuellement ces noms
‫de champs ici, puis je l'appelle un jour, d'accord ?
‫D'accord, et cela termine en
‫fait notre section d'authentification, d'autorisation et de sécurité.
‫Et si vous voulez vous amuser un peu plus, alors bien
‫sûr, vous pouvez essayer de mettre en œuvre certaines des choses
‫que j'ai suggérées dans cette vidéo récapitulative
‫que je vous ai déjà montrée avec cette diapositive
‫avec toutes ces différentes mesures de sécurité
‫que nous avons déjà mises en
‫œuvre et certains dont je vous ai dit d'expérimenter.
‫Alors n'hésitez pas à le faire, ou
‫sinon, eh bien, passons ensemble à la section
‫suivante qui sera à nouveau vraiment passionnante, car nous commencerons alors
‫vraiment à modéliser les données
‫et à apprendre des choses plus avancées sur MongoDB.
‫Alors j'ai hâte de vous y voir.