Temps pour la troisième affectation de ce cours.
Dans ce module, nous avons exploré l'authentification des utilisateurs de manière très détaillée.
Maintenant, dans cette affectation,
nous allons travailler plus loin sur l'authentification des utilisateurs.
Nous ajouterons encore une autre catégorie de comptes appelée en tant qu'administrateur.
Un compte Admin est un super compte qui
a beaucoup de privilèges pour effectuer diverses opérations.
Un compte d'utilisateur ordinaire ne peut effectuer que certaines opérations sur notre serveur.
De même, une requête non enregistrée provenant d'un client
qui n'est pas connecté ne peut effectuer que certaines opérations sur notre serveur.
Maintenant, nous allons modifier notre serveur afin
que les opérations get puissent être effectuées par n'importe qui.
Vous n'avez pas besoin de vous connecter au système pour effectuer des opérations get sur les
différents points de terminaison de l'API de repos, à l'exception de la soumission de commentaires.
Pour les opérations restantes sur les points de terminaison de
l'API restants, les opérations de mise et de suppression POST,
celles-ci seront limitées à être effectuées uniquement par les utilisateurs admin,
un utilisateur ordinaire ne peut pas effectuer ces opérations.
Évidemment, vous ne voulez pas qu'un utilisateur ordinaire soumette de nouveaux plats, des promotions
ou des informations de leader, modifie des informations existantes,
ou même supprime ces informations existantes.
Cela devrait être le privilège de l'administrateur système de notre serveur.
En outre, nous veillerons à ce qu'un utilisateur ordinaire puisse
poster des commentaires sur des plats spécifiques, c'est acceptable.
De même, un utilisateur ordinaire peut mettre à jour et supprimer les commentaires qu'il ou elle a postés.
Les autres utilisateurs ou même l'administrateur ne peuvent pas mettre à jour ou supprimer les commentaires postés par un autre utilisateur.
Donc, c'est une autre restriction que nous allons placer sur notre serveur.
Maintenant, allons de l'avant et examinons comment nous allons mettre
en œuvre ceci et comment exactement notre serveur effectue ces opérations.
Tout d'abord, je vais vous illustrer comment vous
créeriez un compte administrateur dans votre système.
Vous vous rendrez compte que nous devons aller
dans les coulisses pour créer un compte administrateur simplement parce que,
nous ne voulons pas qu'un compte administrateur soit créé en effectuant
l'opération d'inscription sur notre compte utilisateurs/inscription.
Cela laissera notre serveur vulnérable aux attaques.
Ainsi, un compte administrateur ne peut être configuré que dans les
coulisses en accédant directement à la base de données.
Alors, regardons comment nous allons faire
cela dans l'illustration que je vais vous montrer juste après.
Maintenant, pour examiner notre base de données,
laissez-moi démarrer l'ondulation Mongo à l'invite de commande,
puis aller dans le dossier de confusion et puis laissez-moi
examiner les utilisateurs qui sont enregistrés dans ma base de données en ce moment.
Donc, vous pouvez voir que je n'ai qu'un seul utilisateur enregistré.
Donc, permettez-moi de mettre en place deux comptes supplémentaires,
un pour
un utilisateur ordinaire, et un qui sera un administrateur.
Donc, nous allons inscrire l'administrateur et le deuxième utilisateur également à partir de notre point d'inscription,
puis ils reviendront sur le Mongo Ripple et ensuite configurer le compte administrateur
explicitement en modifiant l'enregistrement dans notre base de données.
Aller à la broche Postman,
laissez-moi inscrire deux utilisateurs supplémentaires.
Donc, nous avions déjà inscrit un utilisateur avec ce nom,
donc je vais inscrire un autre utilisateur dans mon système,
et donc, un deuxième utilisateur est maintenant enregistré avec succès.
Maintenant, laissez-moi aussi enregistrer un compte administrateur.
Donc, pour le compte admin,
je vais configurer le nom d'utilisateur en tant qu'administrateur, puis j'inscrirai un utilisateur admin.
Donc, nous constatons que nous avons maintenant ajouté deux nouveaux comptes à notre système.
Aller à l'ondulation Mongo,
laissez-moi répéter à nouveau le
db.user.find () et laissez-moi le faire assez pour qu'il semble plus facile à lire.
Donc, quand je fais cela,
vous pouvez voir que nous avons un compte administrateur ici avec le nom d'utilisateur en tant qu'administrateur.
Ignorez le prénom et le nom,
je vais configurer ce prénom et ce nom pour être les mêmes pour tous les trois.
Ensuite, nous avons l'autre compte utilisateur que j'ai configuré avec le nom d'utilisateur ici,
et le troisième compte d'utilisateur que nous avions déjà dans notre base de données.
Donc, maintenant, nous avons trois comptes d'utilisateurs ;
deux comptes d'utilisateurs ici,
et un compte d'administrateur.
Maintenant, bien sûr, vous verrez que dans les comptes d'utilisateurs,
nous avons cet indicateur appelé comme indicateur admin qui est défini sur false pour
tout compte qui est inscrit sur ce point de terminaison /users/signup.
C' est la façon par défaut que vous devez configurer des comptes.
Vous ne pouvez pas autoriser un utilisateur à configurer un compte administrateur
en faisant quoi que ce soit directement sur le point de terminaison de l'API restante.
Au lieu de cela, nous irons dans les coulisses, puis dans le Mongo Ripple,
je vais modifier cet enregistrement pour l'utilisateur admin en
disant db.users.update et ensuite
nous fournirons le nom d'utilisateur en tant qu'administrateur ici.
Donc, nous allons mettre à jour l'enregistrement de verset et puis nous dirons {$set :
rappelez-vous comment nous manipulons le MongoDB alors nous allons
dire {$set : {"admin » : « true »}}.
Donc, ce que nous faisons ici, c'est que nous
recherchons ce compte d'utilisateur avec le nom d'utilisateur admin,
puis nous configurons le drapeau admin sur true
ici en utilisant l'option $set.
Donc, voici comment nous mettrons à jour un compte pour être un compte administrateur.
Donc, vous voyez que cela a modifié les résultats.
Alors, vérifions à nouveau les comptes.
Maintenant, lorsque vous vérifiez le compte,
vous verrez que pour le compte administrateur,
l'indicateur admin est maintenant défini sur true,
donc c'est ainsi que vous finirez par créer un compte administrateur.
Maintenant, le compte Admin comme nous nous attendions a des privilèges supplémentaires.
Donc, une fois que vous avez terminé cette affectation,
vous remarquerez que l'opération get peut être effectuée par n'importe quel utilisateur sur
le /dishes/dishes/aspecificdishendpoint/promotions
et le /promotions/specificpromotionendpoint et de la même manière,
pour les leaders dans les points aussi.
Mais les
opérations POST, put et delete sur ces points de terminaison ne peuvent être effectuées que par les utilisateurs admin.
Maintenant, en plus, le point de terminaison des commentaires,
nous autorisons seulement un utilisateur enregistré qui s'est connecté à
accéder aux commentaires pour un plat spécifique,
nous allons permettre à un utilisateur connecté de poster des commentaires.
Nous avons déjà configuré cela dans l'exercice de sorte
que, lorsque l'utilisateur publie le commentaire, nous avons veillé à vérifier
l'authenticité de l'utilisateur, puis lorsque le commentaire est posté,
nous avons configuré l'identifiant de l'auteur pour le commentaire en utilisant l'ID utilisateur.
Nous l'avons donc déjà terminé.
Mais maintenant, en plus,
pour les opérations de mise et de suppression sur les commentaires,
seul l'utilisateur qui a soumis le commentaire spécifique sera
autorisé à faire des opérations de mise et de suppression sur ses propres commentaires.
Tout autre utilisateur ne peut pas modifier les commentaires de quelqu'un d'autre.
De même, même l'administrateur ne peut pas modifier les commentaires de quelqu'un d'autre,
ni supprimer le commentaire de quelqu'un d'autre.
Donc, c'est la deuxième partie de cette mission que vous allez faire.
La troisième partie est qu'un administrateur peut interroger
le point final /users et demander la liste des utilisateurs enregistrés,
aucun autre utilisateur ordinaire ne peut faire cette requête.
Donc, c'est l'autre restriction que nous allons mettre là-dedans.
Maintenant, afin de vérifier qu'un utilisateur est un administrateur,
nous allons d'abord vérifier que l'utilisateur est un utilisateur enregistré.
Ainsi, la fonction de vérification de l'utilisateur que nous avons déjà implémentée dans le
authenticate.js doit être appliquée même là où vous devez vérifier l'administrateur. Tout d'
abord, vous vérifiez qu'il s'agit d'un utilisateur vérifié, par la suite,
vous introduirez une autre fonction appelée VerifyAdmin dans le
fichier authenticate.js qui vérifiera que l'utilisateur est un administrateur.
Maintenant, pour vérifier si un utilisateur est un administrateur,
tout ce que vous devez faire est de vérifier le rec.user qui se trouve sur
l'objet de requête rec.user là,
vérifiez si l'indicateur admin est vrai ou non.
Si l'indicateur admin est true,
vous autoriserez le processus normal de continuer à [inaudible] arriver.
Si l'utilisateur n'est pas un administrateur,
vous allez générer une erreur et renvoyer un message d'erreur vers le client.
Donc, c'est comme ça que nous allons gérer le compte des utilisateurs admin.
Maintenant, lorsqu'un utilisateur essaie de modifier ou de supprimer ses propres commentaires,
nous devons vérifier que l'auteur du commentaire est le
même que l'utilisateur qui essaie de modifier le commentaire.
Maintenant, le rec.user a également le champ ID,
vous devez donc le vérifier avec le champ auteur du commentaire.
Si ces deux correspondent,
vous autorisez l'utilisateur à effectuer les opérations de mise ou de suppression.
Si elles ne correspondent pas,
vous n'autoriserez pas les opérations put ou delete sur ce commentaire spécifique.
C' est donc l'autre aspect que vous allez mettre
en œuvre dans le cadre de votre troisième mission.
Regardons comment toutes ces choses fonctionnent
en utilisant Postman pour effectuer diverses opérations sur notre serveur.
Pour revenir à Postman,
permettez-moi d'abord d'effectuer une opération GET sur les
plats pour juste vérifier ce qu'il y a dans ma base de données.
Donc, si j'effectue une opération GET sur les plats,
remarquez que je ne mets aucune authentification dans l'en-tête.
L' opération GET est autorisée par n'importe qui.
Donc, quand j'effectue l'opération GET,
je peux voir que j'ai déjà un plat avec un commentaire déjà en place dans ce plat.
Ce commentaire a déjà été posté par cet utilisateur.
Donc, nous avons déjà un plat dans le système là-bas.
Donc, c'est parfaitement bien,
je vais supprimer le plat.
Maintenant, pour supprimer le plat,
évidemment cette opération ne peut pas être effectuée par un utilisateur ordinaire.
Donc, laissez-moi me connecter en tant que,
afin que vous puissiez voir que je me connecte en tant qu'utilisateur régulier.
Donc, laissez-moi me connecter en tant qu'utilisateur régulier.
Donc, quand je me connecte, j'obtiendrai le jeton.
Donc, je vais copier ce jeton et le sauvegarder.
Maintenant, que j'ai mon jeton,
laissez-moi effectuer une opération DELETE sur la vaisselle.
Donc, quand je vais à l'opération DELETE.
Donc, laissez-moi sélectionner ce GET, puis faire une opération DELETE avec les plats.
Dans l'en-tête, permettez-moi d'inclure l'autorisation ici et vous remarqueriez
que lorsque nous collons dans la demande et puis envoyons l'autorisation DELETE,
vous remarquerez qu'il revient immédiatement avec ce message ici,
comme vous pouvez le voir dans l'aperçu,
il dit « Vous n'êtes pas autorisé à effectuer cette opération ! «
Ensuite, le code d'erreur est 403 interdit.
Donc, il s'agit d'un message généré par
la fonction VerifyAdmin que vous allez implémenter dans le cadre de cet exercice.
Donc, si l'utilisateur n'est pas un administrateur,
alors c'est le message que votre VerifyAdmin va
générer et il ne permettra pas à la demande d'aller au-delà de ce point.
Donc, vous pouvez voir que j'ai fermé l'opération DELETE.
Maintenant, comment faites-vous ça ?
Dans votre code, vous avez vu que pour appliquer VerifyUser,
nous avons défini Authenticate.verifyUser dans les
opérations POST, PUT et DELETE.
Maintenant, vous pouvez enchaîner le middleware l'un après l'autre.
Donc, nous pouvons dire Authenticate.VerifyUser virgule
et ensuite vous pouvez dire Authenticate.VerifyAdmin,
pour appliquer le VerifyAdmin juste après le VerifyUser.
Donc, si vous voulez qu'une opération soit limitée uniquement à l'administrateur,
vous faites d'abord la partie VerifyUser, puis immédiatement après cela,
vous appliquez le middleware VerifyAdmin.
Juste après ça. Donc, si ces deux vérifications,
passer avec succès, alors vous allez effectuer l'opération.
Si la vérification VerifyAdmin échoue,
vous retournerez ce message d'erreur comme vous le voyez
ici, puis abandonnez l'opération de cette partie.
Ainsi, vous retournerez l'erreur suivante de votre VerifyAdmin,
si l'utilisateur n'est pas un administrateur.
Donc, je vous ai montré comment vous allez
utiliser le compte d'utilisateurs admin pour restreindre les opérations pour une opération PUT
, POST et DELETE.
Même chose, les opérations POST et PUT ne seront pas autorisées sur l'une de ces parties n.
Maintenant, laissez-moi vous montrer l'autre aspect ici.
Donc, vous avez vu que là-dedans,
quand nous effectuons l'opération GET,
vous avez vu qu'il y avait déjà un commentaire qui a été posté par le nom d'utilisateur Jogesh,
le premier utilisateur qui est dans mon système.
Maintenant, je vais me connecter en tant qu'autre utilisateur.
Donc, je vais me connecter comme dans mon deuxième compte qui est Muppala, puis quand je me connecte,
je reçois à nouveau le jeton.
Alors, laissez-moi prendre ce jeton ici.
Laissez-moi copier ce jeton.
Maintenant, ce que je vais faire c'est que je vais faire un GET sur les plats localhost.
Donc, laissez-moi faire un GET sur les plats localhost pour vous montrer le commentaire spécifique à l'intérieur ici.
Donc, ce commentaire particulier avec cet ID.
Donc, ce que je vais faire, c'est que
je vais copier cette pièce d'identité.
Je vais également copier l'ID de commentaire d'ici et je vais effectuer
une opération DELETE sur ce plat spécifique
et rappeler que nous avons
la barre oblique des commentaires, puis cet ID de commentaire particulier.
Maintenant, rappelez-vous que ce commentaire a été posté par ce nom d'utilisateur,
mais je me suis maintenant connecté en tant que l'autre utilisateur avec un nom d'utilisateur différent.
Donc, quand j'effectue maintenant l'opération DELETE en utilisant l'autre compte,
vous remarquerez immédiatement qu'ici il dit,
« Vous n'êtes pas autorisé à supprimer ce commentaire ! «
Alors ça dit 403, même chose.
Si vous essayez de faire une opération PUT sur ce commentaire spécifique connecté en tant qu'autre utilisateur,
cela dira : « Vous n'êtes pas autorisé à mettre à jour ce commentaire ! »
Donc, les deux PUT, DELETE et UPDATE du commentaire de quelqu'un d'autre ne sont pas autorisés.
Alors maintenant, laissez-moi vous connecter en tant qu'administrateur à ce stade, puis laissez-moi essayer de supprimer
ce commentaire particulier et vous verrez que le même message sera généré.
Ainsi, un administrateur ne peut pas non plus supprimer ou mettre à jour les commentaires de quelqu'un d'autre.
Donc, pour me connecter en tant qu'administrateur,
laissez-moi entrer dans le POST ici et puis laissez-moi me connecter en tant qu'administrateur.
Maintenant, rappelez-vous que ces jetons seront valides pendant 33 600 secondes.
Ainsi, vous pouvez enregistrer ces trois jetons que vous générez pour les trois utilisateurs.
Donc, vous n'avez pas besoin de continuer à vous connecter en tant qu'utilisateur particulier.
Tant que vous utilisez le bon jeton dans l'en-tête,
vos opérations vont très bien identifier les trois utilisateurs différents.
Alors, laissez-moi me connecter en tant qu'administrateur ici.
Donc, quand je me connecte en tant qu'administrateur,
je reçois le jeton ici.
Donc, je vais copier et enregistrer ce jeton.
Rappelez-vous juste quel jeton appartient à qui lorsque vous faites une copie de ceci.
Maintenant, revenant à cela, supprimez l'opération de commentaire.
Je vais aller dans l'en-tête et puis je vais changer cela pour le jeton pour l'
administrateur, puis essayer d'effectuer la même opération DELETE et vous voyez
que même l'administrateur n'est pas autorisé à supprimer le commentaire posté par un autre utilisateur.
C' est tout à fait acceptable.
Mais essayons de supprimer le même commentaire,
par cet utilisateur
qui a créé ce commentaire et vous verrez que cela peut être fait avec succès.
Alors, faisons cette opération.
Donc, pour ce faire, je vais revenir en arrière et récupérer le jeton que j'ai
obtenu pour le premier utilisateur, puis changer le champ Autorisation.
Maintenant, pour cette opération DELETE,
je vais changer ceci en porteur,
et puis c'est le jeton pour le premier utilisateur avec le nom d'utilisateur Jogesh.
Donc, quand j'essaie de supprimer ce commentaire,
vous remarquerez que le commentaire est maintenant supprimé avec succès.
Ainsi, comme vous pouvez le voir dans les étapes,
le commentaire ne peut être supprimé que par l'utilisateur qui a créé ce commentaire.
Maintenant, l'étape suivante,
lorsque nous faisons l'opération DELETE sur la vaisselle,
nous avons vu plus tôt que si nous avons fait l'opération DELETE en tant qu'utilisateur ordinaire,
vous obtenez un message disant :
« Vous n'êtes pas autorisé à effectuer cette opération ! »
Donc, je vais changer ce jeton pour le jeton de l'administrateur, puis
vous montrer qu'un administrateur peut effectuer l'opération DELETE sur la vaisselle et le pot.
Donc, en entrant dans cette requête,
permettez-moi de changer le jeton pour être le jeton pour l'utilisateur admin.
Ainsi, lorsque j'effectue l'opération DELETE en tant qu'utilisateur admin,
vous remarquerez que l'opération DELETE est
réussie et répondez ensuite avec le message ici.
Maintenant, quand je fais un GET sur le point de terminaison vaisselle,
vous remarquerez que les opérations GET montrent que mes plats ont été vidés.
Maintenant, l'autre opération que vous allez également implémenter dans cette affectation,
est que nous pouvons faire une opération GET sur le point de terminaison des utilisateurs de barre oblique.
Ainsi, lorsque vous effectuez une opération GET sur le point de terminaison des utilisateurs de barre oblique,
vous remarquerez que si vous n'êtes pas un utilisateur autorisé,
vous n'êtes pas autorisé à effectuer cette opération.
Donc, le localhost : 3000/users/endpoint, vous
allez maintenant permettre que cela soit effectué uniquement par l'administrateur.
Donc, si un utilisateur ordinaire,
si vous vous connectez en tant qu'utilisateur ordinaire avec l'en-tête,
vous ne serez pas autorisé à effectuer cette opération.
Maintenant, laissez-moi changer ce jeton pour le
jeton de l'administrateur et vous verrez que
l'administrateur sera autorisé à effectuer cette opération.
Donc, aller au GET,
laissez-moi changer ce jeton en jeton pour
l'utilisateur admin et puis quand j'effectue l'opération GET sur cela, il revient.
Comme vous pouvez le voir, les trois utilisateurs qui sont enregistrés dans mon système,
il montre le numéro d'utilisateur un, le
numéro d'utilisateur deux, et le numéro d'utilisateur trois.
Bien sûr, notez que le hachage et le sel sont supprimés,
lorsque le message est renvoyé par le côté serveur vers le côté client.
Ainsi, les informations de hachage et de sel ne seront jamais révélées à l'extérieur.
Ainsi, Mongos s'occupera automatiquement de
filtrer ces informations avant qu'elles ne renvoient les informations de l'utilisateur.
Donc, parce que vous ne devriez pas révéler les
informations de hachage et de sel au monde extérieur.
Donc, il s'agit des trois informations de comptes d'utilisateur qui sont renvoyées.
Par conséquent, cela n'est renvoyé que si vous effectuez l'opération GET sur
le point de terminaison des utilisateurs de barre oblique en tant qu'utilisateur administrateur.
Si vous effectuez la même requête que n'importe quel autre utilisateur,
cela ne sera pas autorisé.
Donc, encore une fois, vous allez vérifier d'abord,
VerifyUser, puis vérifier le VerifyAdmin et seulement si c'est un administrateur,
alors cette opération peut être effectuée sur ce point final.
Donc, ce sont toutes les différentes tâches que vous ferez dans le cadre de cette affectation.
Les instructions relatives à l'affectation décrivent en détail la façon dont ces opérations doivent être effectuées.
Lisez donc les instructions avant de procéder à la troisième affectation.
Amusez-vous à terminer la troisième mission.