‫Instructeur : Très bien, créons maintenant ces nouveaux
‫utilisateurs, sur la base du modèle que nous venons de
‫mettre en œuvre dans la dernière vidéo.
‫Ainsi, nous effectuerons la plupart des tâches liées aux utilisateurs, telles que
‫la création de nouveaux utilisateurs, la connexion des utilisateurs ou
‫la mise à jour des mots de passe dans le contrôleur d'authentification.
‫Donc, tout ce qui est vraiment lié à l'authentification ne sera
‫pas dans le contrôleur d'utilisateur que nous avons
‫réellement créé auparavant, mais
‫à la place, nous allons créer un contrôleur d'authentification.
‫Donc, toutes les fonctions
‫liées à l'authentification iront ici.
‫Et cela aura un peu plus de sens plus
‫tard, lorsque nous commencerons à utiliser toutes les fonctions
‫que je vais mettre ici.
‫Et maintenant, la première chose
‫que nous devons faire est d'importer
‫notre utilisateur, donc notre modèle d'utilisateur bien sûr,
‫et c'est à un niveau supérieur, alors il devrait être dans les modèles,
‫puis dans userModel.
‫D'accord.
‫Alors, créons et exportons notre tout premier contrôleur.
‫Et je vais appeler celui-ci une inscription.
‫Et donc vous voyez que je ne l'appelle pas create user,
‫comme je l'ai fait dans un
‫contrôleur de tournée, mais vraiment je l'appelle inscription
‫parce que c'est le nom qui a un peu
‫plus de sens dans le contexte de l'authentification.
‫Ce sera donc bien sûr une fonction asynchrone, car nous allons
‫effectuer des opérations de base de données.
‫Ensuite, demandez, répondez et ensuite comme
‫toujours, puis c'est ici que nous créons le nouvel utilisateur.
‫Et donc c'est très similaire à ce que nous faisions avant.
‫Donc, cette fois, cela s'appelle newUser,
‫puis rappelez-vous comment
‫nous créons un nouveau document basé sur un modèle.
‫Nous utilisons donc bien sûr le
‫nom du modèle, qui dans ce cas
‫est User, puis nous utilisons la méthode create.
‫Et puis tout ce que
‫nous avons à faire est de passer un objet
‫avec les données à partir desquelles l'utilisateur doit être créé.
‫Et donc, comme avant, ces données sont en fait dans req. corps.
‫Et donc tout cela va renvoyer une
‫promesse, et nous devons donc attendre cela, et c'est
‫donc la raison pour laquelle il s'agit d'une fonction asynchrone.
‫Et je vois que là-haut, nous avons besoin d'exportations.
‫Et maintenant, à l'étape suivante,
‫nous enverrons réellement ce nouvel utilisateur au client.
‫Donc rés. status, qui est 201 pour créé,
‫puis notre objet JSON.
‫C'est donc à nouveau le
‫succès, puis notre propriété de données qui est à
‫nouveau appelée une
‫enveloppe ici, donc une propriété qui va contenir les données elles-mêmes.
‫Et les données sont maintenant appelées user,
‫alors qu'avant elles s'appelaient tour, et
‫donc ce que nous allons envoyer ici est le newUser.
‫Sauvegardez-le et avant d'essayer, rappelez-vous qu'il
‫s'agit d'une fonction asynchrone et que nous devons
‫donc réfléchir à la gestion des erreurs ici.
‫Alors, que devons-nous faire ici ?
‫Eh bien, nous devons envelopper toute cette fonction
‫que nous venons de créer dans la fonction catchAsync que nous
‫avons créée dans la dernière section.
‫Alors rappelez-vous comment nous avons fait cela dans le tourController, où
‫toutes les fonctions asynchrones sont encapsulées
‫dans cette fonction catchAsync afin que nous n'ayons
‫pas à
‫écrire le bloc try catch dans chaque fonction ici.
‫Rappelez-vous cela de la dernière section?
‫Donc en fait, je vais
‫aller de l'avant et copier cette déclaration requise ici.
‫Donc un peu
‫paresseux parfois, pas envie d'écrire le même code
‫encore et encore, donc catchAsync, et puis nous
‫devons fermer cela ici à la fin.
‫Et maintenant, tout ce
‫que nous avons à faire est d'implémenter réellement
‫la route afin que ce gestionnaire d'inscription ici puisse ensuite être appelé.
‫Et donc allons à nos
‫userRoutes, que nous avons en fait déjà créées quelque temps auparavant,
‫et nous avons déjà quelques routes ici.
‫Mais en fait, je vais en créer un nouveau ici maintenant.
‫Et comme je l'ai mentionné juste au début de cette
‫vidéo, la ressource utilisateur est un peu différente
‫de toutes les autres ressources.
‫Encore une fois, parce que cela a vraiment à
‫voir avec tout ce qui concerne l'authentification.
‫Et donc nous avons un contrôleur
‫différent pour cela, donc le authController, les noms de fonction
‫ont également des noms
‫différents, et nous aurons donc également une route spéciale.
‫Disons routeur. post, puis nous
‫créerons un itinéraire pour l'inscription, donc /inscription, et c'est là
‫que nous utiliserons cette fonction
‫que nous venons de créer auparavant.
‫Et bien sûr, avant
‫de pouvoir le faire, nous devons exiger ce contrôleur d'authentification.
‫Donc, dupliquons simplement cette ligne
‫ici et remplaçons user à deux endroits, et nous avons
‫donc ici notre authController, et
‫utilisons-le maintenant. s'inscrire.
‫Donc, comme vous
‫le voyez, l'inscription est vraiment une sorte de point final spécial.
‫Cela ne correspond pas à l'architecture REST
‫dont nous avons parlé précédemment, car dans ce cas,
‫cela n'a pas beaucoup de sens.
‫Et rappelez-vous donc comment nous avons dit que
‫dans certains cas particuliers, nous
‫pouvons bien sûr créer d'autres points de terminaison
‫qui ne correspondent pas à 100% à cette philosophie REST qui est fondamentalement implémentée ici.
‫Donc, ceci suit bien sûr
‫à 100% la philosophie REST, où le nom de l'URL n'a rien
‫à voir avec l'action qui est réellement effectuée.
‫Tandis qu'ici, bien sûr, c'est le cas.
‫Le nom de la route est donc
‫inscription car nous inscrivons des utilisateurs.
‫Et aussi ici, nous avons implémenté toutes ces
‫différentes déformations HTTP, mais ici pour
‫l'inscription, nous n'avons vraiment besoin que de POST.
‫Nous ne pouvons donc pas vraiment obtenir de données à partir de l'inscription, ou nous
‫ne pouvons pas corriger une inscription, donc ne pas la mettre à jour.
‫Cela n'a pas vraiment de sens, et donc dans ce cas, tout
‫ce que nous voulons
‫faire, c'est avoir une route pour l'inscription,
‫où nous ne pouvons que POST les données.
‫Car encore une fois, cela n'a
‫de sens que d'envoyer des données à cette route,
‫de sorte que le nouvel utilisateur soit ensuite créé.
‫Et nous aurons différentes routes similaires à celle-ci, comme
‫pour la connexion, ou pour la réinitialisation
‫du mot de passe, et toutes sortes de choses comme ça.
‫Et nous conserverons également ces
‫routes ici, donc celles dans un format plus REST, car
‫il y a aussi la possibilité pour un administrateur
‫système de mettre à jour ou de
‫supprimer ou d'obtenir tous les utilisateurs en fonction de leur ID.
‫Mais nous nous en occuperons plus tard, pour l'instant nous
‫voulons juste implémenter toutes les fonctions
‫qui concernent l'authentification.
‫Donc, fondamentalement, des fonctions qui ne sont pertinentes
‫que pour l'utilisateur lui-même.
‫Ce n'est donc pas un administrateur qui va inscrire un
‫utilisateur, ou ce n'est pas un administrateur qui va connecter
‫un utilisateur, mais à la place, c'est le
‫propre utilisateur qui va s'inscrire lui-même, ou se connecter lui-même.
‫D'accord, est-ce que ça a du sens ?
‫Nous devrions donc avoir tout en place
‫maintenant, de sorte que cela devrait maintenant fonctionner lorsque nous créons notre nouvel utilisateur.
‫Donc, lorsque nous nous inscrivons essentiellement, pour notre application.
‫Alors essayons ça maintenant.
‫Copiez simplement cette
‫URL, les utilisateurs, puis inscrivez-vous.
‫Ensuite, nous devons spécifier le
‫corps, nous disons brut, puis JSON.
‫Oh et aussi, n'oubliez pas bien sûr, de mettre
‫celui-ci en POST.
‫Alors, de quelles données avons-nous besoin ici ?
‫Rappelez-vous, le premier est le
‫nom, puis l'e-mail, et je mets
‫le mien ici en fait, puis le mot de passe, et alors faisons
‫quelque chose ici, ça n'a pas vraiment d'importance.
‫Et encore une fois, nous parlerons de la gestion des
‫mots de passe un peu plus
‫tard, et en fait directement dans la prochaine vidéo.
‫Alors maintenant, celui-ci devrait être le même.
‫Alors réussissez 1234, juste comme test.
‫Et la photo souvenir n'est pas obligatoire, et
‫donc je ne fais pas ça.
‫Et donc voyons maintenant.
‫Et maintenant, nous obtenons cette erreur
‫ici, et c'est parce que j'ai mal orthographié le mot de passe ici.
‫D'accord, ce serait donc la façon allemande de l'écrire.
‫Et maintenant c'est juste.
‫D'accord, et en effet, nous obtenons notre nouvel utilisateur ici.
‫Parfait.
‫Disons maintenant que nous avons essayé de le faire avec un GET.
‫Qu'obtiendrions-nous?
‫Eh bien, "Cet
‫itinéraire n'est pas encore défini", c'est
‫parce que nous avons en
‫fait déjà défini cet itinéraire ici, donc fondamentalement cette
‫partie ici de l'itinéraire, alors laissez-moi
‫vous montrer rapidement cela, donc ce n'est
‫pas dans le tourController, mais dans le userController.
‫Donc, fondamentalement, nous avons getUser ici,
‫puis "Cet itinéraire n'est pas encore défini. " C'est donc celui-ci que nous obtenons, mais
‫bien sûr, cela
‫ne nous intéresse pas vraiment.
‫Et maintenant, enregistrons-le ici, dans Postman afin que
‫nous puissions ensuite le réutiliser facilement.
‫Alors inscrivez-vous.
‫Et maintenant,
‫juste pour confirmer rapidement, ouvrons-le également dans
‫Compass ici, et voyons qu'à ce stade, nous n'avons que
‫des tournées, et allons donc ici à natours, essayons de
‫recharger ceci, et c'est probablement ici, et ainsi de suite en effet, nous obtenons
‫maintenant notre collection d'utilisateurs ici.
‫Alors ouvrons cela, et en effet, nous obtenons maintenant
‫notre premier document ici.
‫Donc l'utilisateur que nous venons de créer.
‫Maintenant, ici, vous pouvez voir le mot
‫de passe simple, et bien sûr, ce n'est pas idéal.
‫Et bien sûr, ce n'est pas idéal, donc dans
‫une application Web, les mots de
‫passe ne devraient jamais être stockés aussi simplement dans une base de données.
‫Il y a donc beaucoup de gestion des mots de passe qui
‫doit se faire dans les coulisses, et c'est donc exactement ce que
‫nous ferons dans la prochaine vidéo.