Maintenant que nous avons compris passeport et comment passeport ajoute
un middleware d'authentification simple pour notre application NodeJS,
et fournit un
moyen flexible et facile à configurer et fournit diverses stratégies d'authentification des utilisateurs,
partons un voyage avec notre passeport.
Pour commencer cet exercice,
comme première étape, nous allons installer passeport,
passeport-local et passeport-local-mongoose modules de noeud dans notre serveur de confusion.
Donc, à l'invite de type npm instal_passeport,
passeport-local,
passeport local-mongoose mnus moins enregistrer et installer ces trois modules.
Comme vous pouvez le voir pour le moment, nous commençons avec passeport 0.4.0,
passeport-local 1.0.0 et passeport-local-mongoose versions 5.0.1 dans ce cours.
Maintenant que nous avons installé passeport, passeport-local et passeport-local-mongoose,
allons au serveur de confusion et allons au fichier user.js.
Nous allons mettre à jour le schéma utilisateur et le modèle pour utiliser le passeport-local-mongoose.
Pour ce faire, ici nous dirons
var PassportLocalMongoose
exiger passeport-local-mongoose.
Donc, cela nous allons installer comme
le plugin mongoose dans notre application et nous pouvons supprimer le nom d'utilisateur et le
mot de passe parce que ceux-ci seraient automatiquement ajoutés par
le plugin passport-local-mongoose ici et
pour l'utiliser comme un plugin dans notre schéma et modèle mongoose.
On dira brancher l'utilisateur et passeport-local-mongoose.
Donc, ce sera automatiquement comme je l'ai dit en ajoutant le support pour le
nom d'utilisateur et le stockage haché du mot de passe en utilisant
le hachage et le sel et en ajoutant
des méthodes supplémentaires sur le schéma de l'utilisateur
et le modèle qui sont utiles pour l'authentification du passeport.
Donc, une fois que nous avons terminé la mise à jour du fichier user.js puis dans notre dossier de projet,
nous allons créer un nouveau fichier et le nommer comme authenticate.js.
Dans le fichier authentic.js,
laissez-moi importer un passeport.
Donc, nous allons dire exiger passeport et nous allons
utiliser ce fichier pour stocker les stratégies d'authentification que nous allons configurer.
Donc, nous allons dire var. LocalStrategy exige passeport local, de
sorte que le module local passeport exporte une stratégie que nous pouvons utiliser pour notre application.
Donc, nous allons dire Passport-local.Strategy
et puis nous allons importer l'utilisateur de modèles utilisateur.
Configurez maintenant le passeport avec la nouvelle stratégie locale
et ensuite nous allons l'exporter à partir de ce fichier car ce sera un module de nœud.
Donc, nous allons dire exports.local et nous allons dire passeport et vous
pouvez voir que le passeport prend en charge les différentes méthodes
ici donc nous allons dire l'utilisation du passeport et dire
nouvelle stratégie locale et ensuite c'est là
que les fonctions qui sont supportées par le passeport-local-mongoose viennent à notre aide.
La stratégie locale devra donc être fournie avec la fonction de vérification.
A l'intérieur de cette fonction, nous vérifierons l'utilisateur.
Cette fonction de vérification sera appelée avec le nom d'utilisateur et le mot de passe que le
passeport extrait de notre demande entrante.
Maintenant, dans la demande entrante pour le LocalStrategy, le nom d'utilisateur et
le mot de passe doivent être fournis dans le corps du message sous la forme d'une chaîne Json.
Encore une fois parce que nous faisons body-parser afin qu'il soit
ajouté dans le corps du message, puis à partir de là passeport,
nous allons récupérer cela et puis utiliser cela et fournir le nom d'utilisateur et le mot de passe
comme paramètres de la fonction de vérification que nous allons fournir à la stratégie locale.
Puisque nous utilisons passeport mongoose plugin,
le plugin mongoose lui-même ajoute cette fonction appelée user.authenticate.
Il ajoute donc cette méthode au schéma utilisateur et au modèle.
Nous allons fournir cela comme la fonction
qui fournira l'authentification pour le LocalStrategy.
Maintenant, si vous n'utilisez pas
passeport-local-mongoose lorsque vous configurez un plugin mongoose que nous avons fait,
si vous n'utilisez pas cela,
alors vous devez écrire votre propre fonction d'authentification utilisateur ici.
Dans la conférence plus tôt,
je vous avais montré une fonction d'authentification utilisateur simple
qui peut être utilisée ici, mais celle qui est
fournie par le module passeport-local-mongoose est plus
complète et c'est donc ce que nous allons utiliser dans notre application.
De plus, puisque nous utilisons toujours des sessions pour suivre les utilisateurs dans notre application,
nous devons sérialiser et désérialiser l'utilisateur.
Donc, cela prend essentiellement les informations de l'utilisateur.
Rappelons maintenant que l'authentification du passeport va monter la propriété req.user ou l'utilisateur au
message de demande et
que les informations de l'utilisateur seront sérialisées et désérialisées réalisées en utilisant
ce dicton utilisateur sérialiser et désérialiser passeport utilisateur.
Aussi, nous dirons utilisateur désérialiser utilisateur.
Ces deux fonctions qu'ils sérialisent l'utilisateur et désérialiser
l'utilisateur sont fournies sur le schéma utilisateur et le modèle par l'utilisation du plugin passport-local-mongoose ici.
Donc, cela prendra soin de tout ce qu'il est nécessaire pour
notre soutien pour les sessions de passeport.
Donc, une fois que nous avons terminé cette mise à jour du fichier authenticate.js,
ce fichier sera nécessaire partout où il est nécessaire pour que nous puissions l'utiliser dans notre authentification.
Ensuite, allez au fichier users.js,
dans le fichier users.js,
nous allons d'abord importer le passeport.
Donc, nous allons dire passeport var exiger passeport.
Ensuite, parce que nous utilisons le plugin mongoose local passeport,
le plugin mongoose lui-même fournit quelques métriques qui
nous sont utiles dans le processus d'inscription et dans le processus de connexion.
Donc, en descendant au poste de routeur ici,
le plugin mongoose nous fournit une méthode appelée register,
sur le schéma de l'utilisateur et le modèle.
Donc, nous allons dire registre utilisateur et cela sera transformé en dire nouvel utilisateur.
Ce nouvel utilisateur est le premier paramètre que le registre prend
et le second paramètre est le mot de passe du corps req.
Donc, le mot de passe qui vient en tant que deuxième paramètre dans le corps du message.
Rappelez-vous donc que le nom d'utilisateur et le mot
de passe sont transmis lorsque vous vous inscrivez dans le corps du message.
Maintenant, dans ce cas,
cela entraînera une fonction de rappel fournissant l'erreur
et l'utilisateur comme les deux valeurs de rappel ici et malheureusement,
cela ne fonctionne alors pas dans ce cas.
Donc, je vais devoir découper cela d'ici et ensuite
gérer cela à l'intérieur de cette méthode de rappel ici.
Donc, laissez-moi juste indenter ceci,
afin qu'il soit plus facile de voir le code ici.
Donc, je vais dire, le registre de l'utilisateur et le premier paramètre est
un nouvel utilisateur créé avec
l'alimentation du nom d'utilisateur ici et le deuxième paramètre est le mot de passe,
et puis le résultat est cette fonction de rappel qui
appellera, nous dirons l'utilisateur d'erreur ici.
Dans ce cas, nous devons éditer un peu le code ici.
Donc, dans la première partie,
nous dirons si erreur,
alors ils devront renvoyer explicitement la réponse.
Donc, je vais juste copier ces deux-là.
Donc, nous allons dire, si erreur,
puis code d'état res,
nous allons définir cela à 500 et définir le type de contenu d'en-tête et puis,
nous allons définir res json, puis erreur, erreur.
Donc, nous allons construire un objet json avec
l'erreur comme valeur de la propriété error dedans, puis renvoyer cela.
Donc, c'est comme ça que vous gérez l'erreur dans ce cas.
Sinon, ce que nous faisons ici, c'est que nous
dirons passeport authentifier local.
Donc, si nous allons utiliser passeport pour authentifier à nouveau l'utilisateur.
Donc, nous dirons que le passeport authentifie local.
Pour s'assurer que l'enregistrement de l'utilisateur a été réussi.
nous allons essayer d'authentifier le même utilisateur que nous venons d'enregistrer et
ici nous dirons req res et cela
retournera comme une troisième valeur cette fonction à l'intérieur de laquelle,
nous allons renvoyer la réponse à notre client.
Donc on va dire. Laissez-moi supprimer ceci et ensuite l'ajouter ici.
Nous pouvons maintenant supprimer cela alors,
parce que cela n'est alors pas nécessaire pour nous et c'est la fermeture du registre des utilisateurs.
Dans l'autre partie,
nous allons faire passeport authentifier local.
Regardez la syntaxe ici.
Donc, c'est passeport authentifier local et ensuite,
nous devons appeler cette fonction ici que les paramètres req,
res et que le troisième étant une fonction de rappel ici. C'est
ainsi que cela est mis en œuvre parce que passeport s'attend à ce que vous le fassiez de cette façon.
Ici, nous allons définir le code d'état req res est 200,
définir l'application de contenu d'en-tête json, puis nous allons
res l'enregistrement d'état json réussie et nous ne passerons pas la valeur de l'utilisateur ici.
Au lieu de cela, ce que je vais faire est que je vais
mettre un drapeau appelé succès ici à vrai.
Maintenant, de cette façon, du côté du client lorsque ce json est reçu,
le client peut simplement extraire la propriété success et ensuite vérifier s'il est vrai
ou ne pas vérifier rapidement si l'enregistrement a réussi ou non.
C' est ainsi que nous allons gérer le processus d'enregistrement des utilisateurs ici.
Notez donc comment le code a considérablement simplifié.
Si l'utilisateur ne s'est pas enregistré correctement,
cela enverra une erreur de manière appropriée et l'authentification échouera également.
Donc, les deux cas, vous allez attraper la situation lorsque l'authentification de l'utilisateur échoue.
Maintenant, le processus de connexion lui-même est également considérablement simplifié.
Donc, nous n'avons pas besoin de faire tout cela dans la route de connexion ici.
Donc, je vais supprimer tout ce code et cette route de connexion devient simplifiée ici.
Maintenant, pour la connexion route- pour le poste de routeur quand nous le faisons ici,
ici aussi nous nous attendons à ce que le nom d'utilisateur et
le mot de passe soient inclus dans le corps du message de poste qui lui arrive.
Contrairement au cas précédent où nous incluions cela dans l'en-tête d'autorisation,
ici nous nous attendons à ce que cela soit inclus dans le corps du message de publication entrant.
Donc, pour s'authentifier, nous allons simplement dire passeport authentifier et nous allons dire local ici.
Donc ce sera le deuxième appel ici.
Donc c'est le deuxième middleware ici que nous allons couper.
Donc, lorsque la publication du routeur arrive sur le point de terminaison de connexion,
nous allons d'abord appeler le passeport authentifier local.
Si cela réussit, cela arrivera
et la fonction suivante qui suit sera exécutée.
S' il y a une erreur dans l'authentification,
ce passeport authentifier local
enverra automatiquement une réponse au client au sujet de l'échec de l'authentification.
Donc, cela est déjà pris en charge.
Donc, remarquez comment le code dans le processus de connexion est considérablement simplifié.
Donc, si cela se passe avec succès,
j'ai seulement besoin de vérifier les req et res et ici ce que je vais faire
est que je vais simplement renvoyer un message au côté client avec cette information ici.
Nous dirons le code d'état res 200,
res ensemble type de contenu d'en-tête application json et res json succès vrai statut.
Nous dirons que vous êtes connecté avec succès.
C' est ça. C'est le changement que nous allons apporter au fichier users.js.
Donc, remarquez comment, en raison du passeport utilisateur, à
la fois le processus d'inscription et le processus de connexion,
le code a considérablement simplifié dans ce cas.
Maintenant, nous allons passer à mettre à jour le fichier app.js allant à app.js maintenant.
Dans app.js ici,
nous allons entrer passeport.
Ensuite, nous allons importer
le module d'authentification que nous venons d'implémenter.
Nous dirons var authenticate et dans le fichier app.js ci-dessous après session,
nous ajoutons app.use (passeport.initialize),
et app.use (.session).
Si l'utilisateur est connecté,
alors ce qui se passe est que lorsque la session est relancée,
vous rappelez que lorsque vous
vous connectez ici, vous serez connecté ici,
et un appel au passeport authentifier local,
lorsque cela est fait au stade de connexion,
le passeport authentifier local sera
ajoute automatiquement la propriété utilisateur au message de demande.
Donc, il va ajouter req.user, puis,
la session de passeport que nous avons faite ici va automatiquement
sérialiser ces informations utilisateur, puis les stocker dans la session.
Ainsi, et par la suite, chaque fois qu'
une requête entrante vient du côté client
avec le cookie de session déjà en place,
alors cela chargera automatiquement req.user sur la requête entrante.
Donc, c'est ainsi que la session de passeport elle-même est organisée.
Donc, une fois cela fait,
même notre code d'authentification deviendra beaucoup plus simple ici.
Donc, dans le code d'authentification,
nous dirons simplement, si req.user.
Donc, le req.user sera chargé par le middleware de session passeport automatiquement,
et donc nous dirons req.user.
Si ce n'est pas req.user, nous dirons var err, nouvelle erreur,
vous n'êtes pas authentifié, et tous ces messages ici.
Sinon, voir la partie autre est également maintenant simplifiée.
On dira d'autre ensuite.
Donc, votre code d'authentification devient beaucoup plus simple car si req.user n'est pas présent,
cela signifie que l'authentification n'a pas été faite correctement,
c'est pourquoi vous indiquez l'erreur.
Sinon, vous êtes authentifié.
Si req.user est présent,
cela signifie que le passeport a fait l'authentification et que l'
utilisateur req.user est chargé sur le message de demande,
et donc vous pouvez simplement aller plus loin.
Donc, c'est le changement que nous devons faire à app.js.
Sauvegardons tous les changements, puis regardons l'application dans Postman.
Une fois que vous avez enregistré toutes les modifications, redémarrez votre serveur.
Si votre serveur est en cours d'exécution,
arrêtez-le, puis redémarrez votre serveur.
Laissez-moi démarrer mon serveur.
Une fois que le serveur est en service,
allons à Postman et faisons quelques requêtes.
Aller à Postman, laissez-moi maintenant essayer d'enregistrer un nouvel utilisateur
en faisant un post sur les utilisateurs s'inscrivent point de terminaison.
Lorsque l'inscription est publiée,
vous voyez que dans le corps du message de réponse, il dit,
succès vrai, et enregistrement de statut réussi.
Ainsi, l'utilisateur a été enregistré avec succès du côté client.
Donc, maintenant, laissez-moi faire une connexion de l'utilisateur.
Donc, nous allons dire, « Connexion », et toujours fournir
le nom d'utilisateur et le mot de passe dans le corps du message ici.
Donc, quand je clique sur le « Envoyer »,
vous remarquerez immédiatement qu'en bas,
il est dit, succès, true, et état,
vous êtes connecté, puis dans l'en-tête lui-même,
vous verrez un set-cookie venir parce que nous sommes en train de configurer la session,
puis vous voyez le cookie en place là-bas.
Lorsque vous cliquez sur les cookies,
vous voyez l'ID de session en place juste là.
Donc, maintenant, nous sommes connectés avec succès.
Envoyez-nous une requête au point de terminaison Get localhost : 3000 plats.
Vous voyez que votre demande a été acceptée avec succès et qu'une réponse a été envoyée.
Bien sûr, en ce moment,
ma base de données est vide donc c'est pourquoi elle renvoie un tableau vide
du site du serveur lorsque je demande localhost : 3000/plats.
C' est parfaitement bien.
Laissez-moi maintenant déconnecter l'utilisateur.
Donc, quand je déconnecte l'utilisateur, maintenant,
vous remarquerez que l'utilisateur a été déconnecté et lorsque vous cliquez sur les cookies,
vous remarquerez que, ce cookie pour localhost a déjà disparu.
Donc, maintenant, si vous essayez de faire un get sur le localhost:plats,
vous voyez que la réponse dit,
vous n'êtes pas authentifié.
Connectez-vous une fois de plus en faisant un post sur la connexion des utilisateurs,
puis, vous voyez que nous pouvons vous connecter avec succès à ce stade.
Vous remarquez également
que, ce nouveau cookie a été mis en place ici.
Ensuite, si nous faisons un get sur le localhost:plats ici,
maintenant, ce sera un succès.
Puisque nous utilisons passeport-local mongoose comme plugin mongoose,
allons aussi vérifier notre serveur MongoDB pour voir comment les
informations de l'utilisateur sont réellement stockées dans notre MongoDB.
Donc, dans votre terminal,
vous pouvez ouvrir l'ondulation Mongo,
alors disons Mongo au terminal, puis connectez-vous à notre serveur MongoDB,
puis dites utiliser Confusion.
Ensuite, nous allons dire db.users.find () .pretty (), puis imprimer les informations de l'utilisateur.
Ainsi, lorsque vous imprimez les informations de l'utilisateur comme vous le voyez ici,
il y a un utilisateur que nous avons enregistré plus tôt.
Donc, vous verrez que l'enregistrement de l'utilisateur contient l'ID de l'objet, puis,
le nom d'utilisateur ci-dessous,
et le drapeau admin qui est faux, puis,
remarquez également qu'au lieu de stocker le mot de passe lui-même ce que le
plugin mongoose Mongos passeport-local fait est qu'il stocke
sa valeur de sel ici et une valeur de hachage ici.
Maintenant, ce que fait le plugin de Mongo est qu'il utilisera le sel comme un moyen de
crypter le mot de passe et installer le mot de passe haché dans ce champ de hachage ici.
Donc, lorsque vous essayez de vous connecter,
il appliquera la même transformation au mot de passe entrant,
puis essayez de le faire correspondre avec cette valeur de hachage qui est stockée ici.
Ainsi, vous pouvez voir que dans la base de données elle-même,
le mot de passe n'est pas directement stocké dans
la valeur hachée du mot de passe qui est haché en utilisant cette clé sel ici,
que nous voyons ici,
est stocké dans l'enregistrement là.
Donc, c'est ainsi que le plugin Mongoose local passeport-nous permet de
stocker les informations de l'utilisateur dans notre base de données.
Avec cette compréhension rapide de la façon dont passeport, passeport-local
et passeport-local-mongoose nous aident à simplifier
la stratégie locale pour le nom d'utilisateur et le mot de passe dans notre application.
Nous terminons cet exercice.
C' est le bon moment pour vous de faire un commit Git avec le passeport de message.