Maintenant que nous comprenons les cookies et les sessions express,
dans cet exercice, regardons les cookies en particulier.
Nous verrons comment nous pouvons utiliser le middleware cookie-parser
pour configurer et gérer les cookies dans notre application express.
Pour revenir à notre application Confusion Server Express
sur laquelle nous avons travaillé jusqu'
à présent, vous remarquerez en haut que l'analyseur de cookies est
déjà inclus dans notre application express.
Si vous avez besoin d'installer explicitement cookie-parser, il
vous suffit de taper « npm install cookie-parser moins save ».
Mais comme notre Express Generator a déjà inclus
l'analyseur de cookies dans notre application express que nous avons tracée,
nous n'avons pas besoin de faire cette étape dans cet exercice.
Donc, vous voyez que l'analyseur de cookies est déjà inclus là,
et puis si vous faites défiler vers le bas,
vous verrez que dans le code ci-dessous,
vous verrez que l'analyseur de cookies a déjà été inclus dans le middleware là-bas.
Maintenant, pour cet analyseur de cookies,
nous allons utiliser des cookies signés dans cet exercice.
Donc, pour cet analyseur de cookies,
je vais fournir une clé secrète comme paramètre ici.
La clé secrète pourrait être n'importe quelle chaîne là-bas,
donc je vais juste fournir une chaîne comme celle-ci, je vais dire 12345-67890.
Il n'a pas besoin d'être quelque chose de significatif,
c'est juste une clé qui peut être utilisée par
notre analyseur de cookies afin de chiffrer
les informations et de signer le cookie qui est envoyé du serveur au client.
Donc, une fois que nous avons configuré notre cookie-parser pour gérer les cookies signés,
alors dans l'autorisation elle-même, de
sorte que vous voyez que nous avons l'autorisation que nous avons intégrée ici.
Maintenant, dans le cadre de l'autorisation,
ce que nous allons faire est,
la première fois que l'utilisateur essaie d'accéder au serveur,
nous nous attendons à ce que l'utilisateur s'autorise lui-même.
Par la suite, nous allons configurer le cookie côté client à partir du serveur et
ensuite le client n'a pas à
continuer explicitement à envoyer les informations d'authentification de base.
Au lieu de cela, le client devra simplement inclure le cookie dans la demande sortante.
Puisque nous utilisons des cookies signés ici, donc,
lorsque la demande entrante arrive,
donc nous allons gérer cela à l'intérieur de l'autorisation.
Maintenant, vous vous souvenez que nous avons déjà mis en place le middleware d'autorisation ici.
Donc, nous allons modifier ce middleware d'autorisation pour utiliser des
cookies au lieu de l'en-tête d'autorisation.
Donc, ce que nous allons faire ici, c'est que,
nous allons dire « console.log » et ensuite,
« console.log (req.signedCookies) » afin que nous puissions voir ce qui est réellement
inclus dans le cookie signé ici.
Maintenant, aussi après cela,
ce que nous allons faire est que nous dirons : « Si ( ! req.signedCookies.user) ». L'
utilisateur sera une propriété que nous allons mettre
en place dans le cookie signé car vous verrez un
peu plus tard comment nous allons configurer le cookie signé.
Donc, si la demande entrante n'inclut pas le champ utilisateur dans les cookies signés,
et cela signifie que l'utilisateur n'a pas encore été autorisé.
Donc, dans ce cas,
ce que nous allons faire est de s'attendre à ce que l'utilisateur s'authentifie lui-même.
Donc, alors, nous ferons toute cette partie ici.
Notez donc que nous l'avions déjà fait
plus tôt où nous gérions l'en-tête d'authentification.
Donc, nous allons prendre toute cette partie,
jusqu'à ce « autre » ici et ensuite inclure cela à l'intérieur ici.
Donc, essentiellement, ce que nous spécifions ici, c'est que,
permettez-moi de le retirer.
Comme vous le voyez, je suis très particulier à propos de mon indentation
parce que cela garde le code plus facile à lire.
Donc à l'intérieur de
ceci si, donc c'est le point final du si de celui-ci ici.
Donc, nous disons que si le cookie signé ne contient pas la propriété de l'utilisateur,
alors nous attendons à ce que l'utilisateur autorise en incluant l'en-tête d'autorisation.
Nous allons donc chercher l'en-tête d'autorisation.
Si l'en-tête d'autorisation n'est pas disponible,
nous rejetterons simplement l'utilisateur et l'inviterons
à entrer le nom d'utilisateur et le mot de passe comme nous l'avons fait dans l'exercice précédent.
Si l'en-tête d'autorisation est inclus,
nous allons traiter l'en-tête d'autorisation comme nous l'avons fait auparavant,
et si l'utilisateur est un utilisateur autorisé,
rappelez-vous que nous avons appelé le suivant pour laisser l'utilisateur aller de l'avant.
Maintenant, à ce stade,
ce que nous allons faire, c'est que nous allons dire,
nous allons mettre en place le cookie à ce stade.
Donc c'est ici que nous allons utiliser le cookie res ici.
Notez que le cookie n'existe pas,
donc nous dirons « res.cookie ».
Comme vous pouvez le voir, le cookie res lui-même prend la première chaîne de nom de valeur, la chaîne de
valeur et les options, les options de cookie.
Définissez le nom du cookie sur la valeur avec les options données et les options sont incluses ici,
quelques options pour le cookie ici.
Je vais simplement utiliser quelques-unes des options ici.
Donc, nous allons dire, « res.cookie » et puis je vais configurer le cookie avec le nom de l'utilisateur.
Maintenant, remarquez que c'est la raison
pour laquelle je vérifie le req.signedCookies.user là-haut.
Donc, nous allons dire « res.cookie ('user',) » et
le champ utilisateur je vais le définir sur 'admin' et
ensuite je vais configurer ceci pour être un cookie signé.
Donc, je dirai « signé : vrai ».
Donc, ce qui signifie que mon cookie-parser veillera à
ce que ce cookie soit signé et configuré.
Donc, c'est l'option que j'ai configurée pour le cookie res ici.
Donc, cela inclura
ce nom particulier dans le cookie signé avec cette valeur particulière.
Donc c'est la raison pour laquelle je suis capable de vérifier cette valeur ici.
Donc, si cela n'existe pas,
alors bien sûr, je m'attends à ce que l'utilisateur s'authentifie en utilisant
l'authentification de base, et si l'authentification de base est réussie,
alors je vais configurer le cookie ici et configurer
le champ cookie dans le message de réponse sortant ici et
cela demandera le pour configurer le cookie côté client, puis
toutes les demandes suivantes incluront ce cookie dans la demande du client.
Donc, c'est comme ça que je gère le fait quand le cookie.user n'existe pas.
Là. Si elle existe,
alors la partie else,
donc cela signifie que le cookie signé
existe déjà et que la propriété de l'utilisateur est définie sur cela,
alors dans le reste,
ce que je vais vérifier est
si req.signedCookies.user est admin.
Ensuite, cela signifie que le cookie signé contient les informations correctes.
Alors, je dirai ensuite.
Donc, ce qui signifie que vous allez permettre à la demande de passer.
Sinon, ce cookie n'est pas valide car il ne contient pas cette valeur correcte.
Donc, cela signifie que c'est une erreur.
Donc, dans ce cas,
nous dirons que vous n'êtes pas authentifié,
et alors nous allons simplement provoquer l'erreur dans ce point.
Maintenant, nous n'allons pas inviter l'utilisateur pour
la session car cela doit avoir été fait plus tôt.
Maintenant, normalement, cela ne se produirait pas
parce que si le cookie est déjà défini du côté client,
alors il doit inclure la valeur correcte de toute façon.
Mais pour des raisons d'exhaustivité,
j'ai également inclus la vérification d'erreur else ici à ce stade. C'est ça.
Avec cette configuration, nous avons transformé
notre application express en une application qui gère les cookies ici.
Notez encore une fois, laissez-moi attirer votre attention sur ce que nous faisons ici une fois de plus.
Ici, nous vérifions
que la propriété de l'utilisateur dans les cookies signés n'existe pas,
ou même le cookie signé lui-même n'existe pas.
Ensuite, nous nous attendons à ce que l'autorisation de base soit faite.
Si l'autorisation est réussie
, je vais configurer le cookie en utilisant le res.cookie ici.
Ensuite, toutes les demandes suivantes porteront le cookie signé de toute façon,
et alors je vais vérifier que le cookie signé est
un cookie signé valide et signé et contient la propriété de l'utilisateur qui est définie égale à admin.
Si c'est le cas, il s'agit d'un accès autorisé,
donc il permettra de poursuivre.
Si ce n'est pas le cas, je soulève une erreur à ce stade.
Correction mineure, les nouvelles versions de Node.js s'attendent à ce que vous l'utilisiez comme
nouveau tampon. From au lieu de nouveau tampon afin de traiter certains problèmes de sécurité.
Donc il suffit de corriger cette ligne à nouveau tampon .From. C'est ça.
Sauvegardons les changements, puis regardons notre application dans ce facteur.
Si le serveur précédent est en cours d'exécution,
arrêtez-le simplement en tapant Control C,
puis redémarrez le serveur en disant npm start.
Bien sûr, assurez-vous que votre serveur MongoDB est opérationnel.
Sinon, votre serveur express ne démarrera pas correctement.
Donc, une fois que votre serveur express est démarré,
allons voir notre Facteur et essayons de se connecter au serveur.
Et je vais vous montrer quelques aspects sur la façon dont les cookies sont gérés.
Maintenant, allez chez Facteur,
laissez-moi effacer toutes ces informations
de mon Facteur et nous commencerons par les bases.
Alors laissez-moi essayer d'accéder au localhost : 3000/plats.
Maintenant, après avoir tout effacé,
je vais envoyer la demande et enregistrer.
Et donc du côté serveur,
il dit que vous n'êtes pas authentifié.
Ensuite, lorsque vous regardez l'en-tête,
cela me demande de m'authentifier en utilisant le WW-Authenticate.
Alors maintenant, laissez-moi entrer dans l'autorisation, puis configurer l'autorisation de base,
puis je vais configurer l'autorisation en tant qu'administrateur,
puis mot de passe, puis mettre à jour la demande afin que l'en-tête
contienne maintenant l'en-tête d'autorisation ici avec les informations là-bas.
Et puis laissez-moi envoyer la requête Git sur cette partie.
Si j'envoie la requête Git,
alors en réponse, vous voyez que la requête Git a réussi.
Notez aussi quelques autres choses.
Vous verrez que le statut est 200 OK.
Notez également qu'un cookie a été mis en place côté client dans Postman ici.
Ce cookie contient des informations.
Nous allons regarder les détails du cookie dans une minute.
Ensuite, quand vous regardez l'en-tête,
vous voyez dans l'en-tête cette valeur ici disant Set-Cookie,
puis cette information qui vient ici.
Maintenant, si vous regardez attentivement,
vous verrez quelque chose ici dit utilisateur égal à,
et puis vous voyez cette valeur ici, admin là-bas.
Donc, vous remarquez que quelque chose a été enfermé dans le cookie.
Si vous voulez vraiment examiner le cookie,
allez ici dans Postman, puis cliquez sur ces clés,
puis cela vous montrera tous les cookies qui ont été configurés sur ce côté client.
Ensuite, en particulier, maintenant laissez-moi effacer tous ces autres cookies.
J' en ai probablement utilisé certains pour une autre raison.
Laisse-moi juste nettoyer ces cookies.
Bref, si vous les voyez,
vous pouvez les laisser là.
Pas un gros problème.
Concentrez-vous spécifiquement sur l'hôte local ici,
puis vous voyez ce cookie ici.
Il suffit de cliquer sur le cookie,
puis vous voyez la valeur réelle à l'intérieur du cookie qui y est stocké.
Puis aussi la date d'expiration de cette configuration de cookie ici.
Maintenant, cette valeur sera exactement ce que vous avez vu dans
le cookie défini qui est venu du côté serveur.
Maintenant, cela signifie également que dans les requêtes suivantes qui entrent,
donc même si j'efface mon autorisation,
et même si je supprime l'en-tête d'autorisation,
parce que le cookie a été configuré,
ce cookie a été configuré sur mon hôte local,
chaque requête ultérieure va à ce serveur inclura ce cookie.
Donc, même si je n'aurais pas les en-têtes mis en place,
si j'envoie la demande,
vous remarquerez que la requête Git fonctionne comme avant sans aucun problème, en
raison du fait que chaque requête sortante inclura automatiquement
ce cookie dans la requête sortante de mon Postman ici.
Cela démontre l'utilisation de cookies dans notre application.
Avec cela, nous avons vu comment les cookies peuvent être
configurés et traités sur notre serveur express en utilisant l'analyseur de cookies,
et comment nous pouvons configurer des cookies signés.
C' est le bon moment pour vous de faire un commit git avec les cookies de message.