Zeit für die dritte Aufgabe in diesem Kurs.
In diesem Modul haben wir die Benutzerauthentifizierung sehr detailliert untersucht.
Nun, in dieser Zuweisung,
werden wir weiter an der Benutzerauthentifizierung arbeiten.
Wir werden noch eine weitere Kategorie von Konten hinzufügen, die als Admin bezeichnet werden.
Ein Admin-Konto ist ein Super-Konto, das
viele Privilegien hat, verschiedene Operationen auszuführen.
Ein gewöhnliches Benutzerkonto kann nur bestimmte Operationen auf unserem Server ausführen.
Ebenso
kann eine nicht registrierte Anfrage, die von einem nicht angemeldeten Client eingeht, nur bestimmte Vorgänge auf unserem Server ausführen.
Jetzt werden wir unseren Server so modifizieren
, dass Get Operationen von jedermann ausgeführt werden können.
Sie müssen sich nicht beim System anmelden, um Abrufvorgänge auf
den verschiedenen restlichen API-Endpunkten durchzuführen, außer bei der Übermittlung von Kommentaren.
Für die verbleibenden Vorgänge auf den restlichen API-Endpunkten,
den POST-Put- und Löschvorgängen,
werden diese nur von Administratorbenutzern ausgeführt werden,
ein normaler Benutzer kann diese Vorgänge nicht ausführen.
Offensichtlich möchten Sie nicht, dass ein gewöhnlicher Benutzer neue Gerichte oder Werbeaktionen
oder Führungsinformationen einreicht oder vorhandene Informationen ändert
oder sogar diese vorhandenen Informationen löscht.
Dies sollte nur das Privileg des Systemadministrators für unseren Server sein.
Außerdem werden wir sicherstellen, dass ein gewöhnlicher Benutzer
Kommentare zu bestimmten Gerichten posten kann, das ist akzeptabel.
Ebenso kann ein gewöhnlicher Benutzer Kommentare aktualisieren und löschen, die er gepostet hat.
Andere Benutzer oder sogar der Administrator können Kommentare, die von einem anderen Benutzer veröffentlicht wurden, nicht aktualisieren oder löschen.
Dies ist also eine weitere Einschränkung, die wir in unserem Server platzieren werden.
Lassen Sie uns nun weiter gehen und untersuchen, wie wir
dies umsetzen werden und wie genau unser Server diese Operationen durchführt.
In erster Linie werde ich Ihnen zeigen, wie Sie
ein Admin-Konto in Ihrem System erstellen würden.
Sie werden feststellen, dass wir hinter
die Kulissen gehen müssen, um ein Admin-Konto zu erstellen, einfach weil
wir nicht möchten, dass ein Admin-Konto erstellt wird, indem wir
den Anmeldevorgang für unsere Benutzer/Anmeldekonto durchführen.
Dies wird unseren Server anfällig für Angriffe machen.
So kann ein Admin-Konto nur
hinter den Kulissen eingerichtet werden, indem direkt auf die Datenbank zugegriffen wird.
Also, schauen wir uns an, wie wir
dies in der Illustration machen, die ich Ihnen gleich danach zeigen werde.
Nun, um unsere Datenbank zu untersuchen,
lassen Sie mich die Mongo Ripple an der Eingabeaufforderung starten
und dann zum Verwirrungsordner gehen und dann
die Benutzer untersuchen, die in meiner Datenbank registriert sind.
So können Sie sehen, dass ich nur einen Benutzer registriert habe.
Lassen Sie mich also zwei zusätzliche Konten einrichten,
eines für einen normalen Benutzer
und eines, das ein Administrator sein wird.
Also, wir werden den Admin und den zweiten Benutzer auch von unserem Anmeldepunkt aus registrieren,
danach werden sie auf die Mongo Ripple zurückkehren und dann das Admin-Konto
explizit einrichten, indem sie den Datensatz in unserer Datenbank ändern.
Gehen Sie zu Postman Pin,
lassen Sie mich zwei zusätzliche Benutzer registrieren.
Also, wir hatten früher einen Benutzer mit diesem Namen angemeldet,
also werde ich einen anderen Benutzer in meinem System registrieren,
und so ist ein zweiter Benutzer jetzt erfolgreich registriert.
Lassen Sie mich nun auch ein Admin-Konto registrieren.
Also, für das Admin-Konto,
werde ich den Benutzernamen als admin einrichten und dann einen Admin-Benutzer registrieren.
Wir sehen also, dass wir nun zwei neue Konten zu unserem System hinzugefügt haben.
Gehen Sie zum Mongo Ripple,
lassen Sie mich noch einmal die
db.user.find () wiederholen und lassen Sie mich es hübsch machen, damit es einfacher zu lesen aussieht.
Also, wenn ich das tue,
können Sie sehen, dass wir hier ein Admin-Konto mit dem Benutzernamen als Admin haben.
Ignoriere den Vor- und Nachnamen,
ich werde diesen Vor- und Nachnamen so einrichten, dass er für alle drei gleich ist.
Dann haben wir das andere Benutzerkonto, das ich mit dem Benutzernamen hier eingerichtet habe,
und das dritte Benutzerkonto, das wir bereits in unserer Datenbank hatten.
Also, jetzt haben wir drei Benutzerkonten:
zwei Benutzerkonten hier
und ein Admin-Konto.
Nun werden Sie natürlich sehen, dass
wir in den Benutzerkonten dieses Flag als Admin-Flag genannt haben, das für
jedes Konto, das auf diesem /users/signup-Endpunkt angemeldet ist, auf false gesetzt ist.
Dies ist die Standardmethode, mit der Sie Konten einrichten sollten.
Sie können einem Benutzer nicht erlauben, ein Administratorkonto zu konfigurieren,
indem Sie etwas direkt auf dem restlichen API-Endpunkt ausführen.
Stattdessen werden wir hinter die Kulissen gehen und dann in der Mongo Ripple,
werde ich diesen Datensatz für den Admin-Benutzer ändern, indem wir
db.users.update sagen und dann
geben wir den Benutzernamen als admin hier.
Also, wir werden Vers-Datensatz aktualisieren und dann sagen wir {$set:
erinnern Sie sich, wie wir die MongoDB manipuliert haben, also
sagen wir {$set: {"admin“: „true“}}.
Also, was wir hier tun, ist, dass wir nach
diesem Benutzerkonto mit dem Benutzernamen admin suchen,
und dann richten wir das Admin-Flag auf true
hier, indem wir die $set-Option verwenden.
So würden wir ein Konto aktualisieren, um ein Admin-Konto zu sein.
Sie sehen also, dass dies die Ergebnisse geändert hat.
Also, lassen Sie uns noch einmal die Konten überprüfen.
Wenn Sie nun das Konto überprüfen,
sehen Sie, dass für das Admin-Konto
jetzt das Admin-Flag auf true gesetzt
ist, so dass Sie am Ende ein Admin-Konto erstellen.
Nun hat das Admin-Konto, wie wir es erwarten würden, zusätzliche Privilegien.
Also, sobald Sie diese Zuweisung abgeschlossen haben,
würden Sie feststellen, dass die get-Operation von jedem Benutzer auf
dem /dishes/dishes/aspecificdishendpoint/promotions
und dem /promotions/specificpromotionendpunkt ausgeführt werden kann und ähnlich
für die Führer in Punkten auch.
Die POST-,
Put- und Löschvorgänge auf diesen Endpunkten können jedoch nur von Administratorbenutzern ausgeführt werden.
Nun, zusätzlich, die Kommentare Endpunkt,
würden wir nur einem registrierten Benutzer erlauben, der sich angemeldet hat, um
auf Kommentare für ein bestimmtes Gericht zuzugreifen,
werden wir es einem angemeldeten Benutzer erlauben, Kommentare zu posten.
Wir haben dies bereits in der Übung eingerichtet.
Wenn der Benutzer den Kommentar veröffentlicht,
haben wir dafür gesorgt, dass wir
die Authentizität des Benutzers überprüfen und dann, wenn der Kommentar veröffentlicht wird,
haben wir die Autoren-ID für den Kommentar mit der Benutzer-ID eingerichtet. Das
haben wir also bereits abgeschlossen.
Aber jetzt
darf nur der Benutzer, der den spezifischen Kommentar eingereicht hat, für die Put- und Löschvorgänge für Kommentare ausführen und löschen, Operationen für seine eigenen Kommentare.
Jeder andere Benutzer kann die Kommentare einer anderen Person nicht ändern.
In ähnlicher Weise kann selbst der Administrator die Kommentare anderer nicht ändern
oder den Kommentar eines anderen löschen.
Also, das ist der zweite Teil dieser Aufgabe, den Sie tun werden.
Der dritte Teil ist, dass ein Administrator
den Endpunkt /users abfragen und nach der Liste der registrierten Benutzer fragen kann.
Kein anderer normaler Benutzer kann diese Abfrage ausführen.
Also, das ist die andere Einschränkung, die wir dort reinlegen werden.
Um zu überprüfen, ob ein Benutzer ein Administrator ist,
werden wir zuerst überprüfen, ob der Benutzer ein registrierter Benutzer ist.
Also, die Verifizierungsbenutzerfunktion, die wir bereits in der
authenticate.js implementiert haben, sollte auch dort angewendet werden, wo Sie nach dem Admin suchen müssen.
Zuerst überprüfen Sie, dass es sich um einen verifizierten Benutzer handelt, danach
werden Sie eine weitere Funktion namens VerifyAdmin in der
Datei authenticate.js einführen, die überprüft, ob der Benutzer ein Administrator ist.
Nun, um zu überprüfen, ob ein Benutzer ein Administrator ist,
müssen Sie nur den rec.user überprüfen, der sich auf
dem Anforderungsobjekt rec.user befindet,
überprüfen Sie, ob das Admin-Flag wahr ist oder nicht.
Wenn das Admin-Flag wahr ist,
erlauben Sie den normalen Prozess, weiter zum [unhörbaren] passieren zu gehen.
Wenn der Benutzer kein Administrator ist,
generieren Sie einen Fehler und senden eine Fehlermeldung zurück an die Client-Seite.
So werden wir das Admin-Benutzerkonto behandeln.
Nun, wenn ein Benutzer versucht, seine eigenen Kommentare zu ändern oder zu löschen,
müssen wir überprüfen, um sicherzustellen, dass der Autor des Kommentars der
gleiche ist wie der Benutzer, der versucht, den Kommentar zu ändern.
Jetzt hat der rec.user auch das ID-Feld,
also müssen Sie das mit dem Autorenfeld des Kommentars überprüfen.
Wenn diese beiden übereinstimmen,
erlauben Sie dem Benutzer, die Put- oder Löschvorgänge auszuführen.
Wenn sie nicht übereinstimmen,
werden Sie die Put- oder Löschvorgänge für diesen bestimmten Kommentar nicht zulassen.
Dies ist also der andere Aspekt, den Sie
als Teil Ihrer dritten Aufgabe implementieren werden.
Schauen wir uns an, wie all diese Dinge funktionieren,
indem Postman verschiedene Operationen auf unserem Server ausführen.
Zurück zu Postman,
lassen Sie mich zuerst eine GET-Operation auf
Geschirr durchführen, um nur zu überprüfen, was in meiner Datenbank ist.
Wenn ich also eine GET-Operation an den Gerichten durchführe,
beachten Sie, dass ich keine Authentifizierung in den Header lege.
GET-Operation ist von jedem erlaubt.
Also, wenn ich die GET-Operation
durchführe, kann ich sehen, dass ich bereits ein Gericht mit einem Kommentar in diesem Gericht habe.
Dieser Kommentar wurde bereits von diesem Benutzer gepostet.
Also, wir haben bereits ein Gericht im System dort.
Also, das ist völlig in Ordnung,
ich werde das Gericht löschen.
Nun, um das Gericht zu löschen,
offensichtlich, dass die Operation nicht von einem gewöhnlichen Benutzer durchgeführt werden kann.
Also, lassen Sie mich als anmelden,
damit Sie sehen können, dass ich mich als normaler Benutzer einlogge.
Also, lassen Sie mich als normaler Benutzer einloggen.
Also, wenn ich mich einlogge, bekomme ich das Token.
Also, ich werde dieses Token kopieren und speichern.
Nun, da ich mein Token habe,
lassen Sie mich eine DELETE-Operation auf dem Geschirr durchführen.
Also, wenn ich zur DELETE-Operation gehe.
Also, lassen Sie mich dieses GET auswählen und dann eine DELETE-Operation mit den Gerichten durchführen.
Lassen Sie mich in der Kopfzeile die Autorisierung hier einschließen und Sie würden feststellen
, dass, wenn wir die Anfrage einfügen und dann die DELETE-Berechtigung senden,
Sie bemerken würden, dass sie sofort mit dieser Nachricht hier zurückkommt,
wie Sie in der Vorschau sehen können,
es heißt „Sie sind nicht autorisiert Führen Sie diesen Vorgang durch! „
Dann ist der Fehlercode 403 verboten.
Dies ist also eine Nachricht, die von
der VerifyAdmin-Funktion generiert wurde, die Sie als Teil dieser Übung implementieren werden.
Wenn der Benutzer also kein Administrator ist,
dann ist dies die Nachricht, die Ihr VerifyAdmin
generiert, und es wird nicht zulassen, dass die Anfrage über diesen Punkt hinausgeht.
Sie können also sehen, dass ich die DELETE-Operation geschlossen habe.
Nun, wie machst du das?
In Ihrem Code haben Sie gesehen, dass
wir Authenticate.verifyUser in den POST-, PUT-
und DELETE-Operationen setzen, um den VerifyUser anzuwenden.
Jetzt können Sie die Middleware nacheinander verketten.
So können wir sagen, authenticate.verifyUser Komma
und dann folgen, dass Sie Authenticate.VerifyAdmin sagen können,
um die VerifyAdmin direkt nach dem VerifyUser anzuwenden.
Wenn Sie also möchten, dass ein Vorgang nur auf den Administrator beschränkt wird,
führen Sie zuerst den VerifyUser-Teil aus und dann unmittelbar danach
wenden Sie die VerifyAdmin-Middleware an.
Gleich danach. Also, wenn diese beiden Prüfungen
erfolgreich durchlaufen, dann werden Sie die Operation ausführen.
Wenn die VerifyAdmin-Prüfung fehlschlägt,
werden Sie diese Fehlermeldung, wie Sie
hier sehen, zurückgeben und dann den Vorgang dieses Teils abbrechen.
Sie werden also den nächsten Fehler von Ihrem VerifyAdmin zurückgeben,
wenn der Benutzer kein Administrator ist.
Also habe ich Ihnen gezeigt, wie Sie
das Administratorbenutzerkonto verwenden werden, um Operationen für PUT-
, POST- und DELETE-Operationen einzuschränken.
Gleiches gilt, POST- und PUT-Operationen werden auch nicht auf einem dieser n Teile erlaubt.
Nun, dann lassen Sie mich den anderen Aspekt hier demonstrieren.
Also, Sie sahen, dass dort,
wenn wir die GET-Operation durchführen,
Sie sahen, dass es bereits einen Kommentar gab, der von dem Benutzernamen Jogesh, dem
ersten Benutzer, der in meinem System ist, gepostet wurde.
Jetzt werde ich mich als der andere Benutzer anmelden.
Also, ich werde mich wie in meinem zweiten Konto anmelden, das Muppala ist und dann, wenn ich mich einlogge,
bekomme ich wieder das Token.
Also, lassen Sie mich diesen Token hier nehmen.
Lassen Sie mich dieses Token kopieren.
Nun, was ich tun werde, ist, dass ich ein GET auf den localhost Gerichten machen werde.
Also, lassen Sie mich ein GET auf den localhost Gerichten machen, um Ihnen den spezifischen Kommentar hier zu zeigen.
Also, dieser besondere Kommentar mit dieser ID.
Also, was ich tun werde, ist,
dass ich diesen Ausweis kopieren werde.
Ich werde auch die Kommentar-ID von hier kopieren und ich werde
eine DELETE-Operation für dieses spezifische Gericht durchführen
und mich daran erinnern, dass wir
den Schrägstrich Kommentare und dann diese spezielle Kommentar-ID haben.
Denken Sie nun daran, dass dieser Kommentar von diesem Benutzernamen gepostet wurde,
aber ich habe mich jetzt als der andere Benutzer mit einem anderen Benutzernamen angemeldet.
Also, wenn ich jetzt den DELETE-Vorgang mit dem anderen Konto durchführe,
würden Sie sofort bemerken, dass hier steht:
„Sie sind nicht berechtigt, diesen Kommentar zu löschen! „
Dann heißt es 403, dasselbe.
Wenn Sie versuchen, eine PUT-Operation für diesen bestimmten Kommentar auszuführen, der als anderer Benutzer angemeldet
ist, wird es sagen: „Sie sind nicht berechtigt, diesen Kommentar zu aktualisieren!“
Daher sind sowohl PUT, DELETE als auch UPDATE des Kommentars einer anderen Person nicht erlaubt.
Also jetzt, lassen Sie mich an dieser Stelle als Admin anmelden und dann versuchen, diesen
bestimmten Kommentar zu löschen, und Sie würden sehen, dass die gleiche Nachricht generiert wird.
Ein Admin kann also auch die Kommentare anderer nicht löschen oder aktualisieren.
Also, um sich als Admin anzumelden,
lassen Sie mich hier in den POST gehen und dann mich als Admin anmelden.
Denken Sie nun daran, dass diese Token für 33.600 Sekunden gültig sind.
So können Sie diese drei Token speichern, die Sie für die drei Benutzer generieren.
Sie müssen sich also nicht mehr als dieser bestimmte Benutzer anmelden.
Solange Sie das richtige Token in der Kopfzeile verwenden,
führen Ihre Operationen gut aus, um die drei verschiedenen Benutzer zu identifizieren.
Also, lassen Sie mich hier als Administrator einloggen.
Also, wenn ich mich als Admin einlogge,
bekomme ich das Token hier.
Also, ich werde dieses Token kopieren und speichern.
Denken Sie daran, welches Token zu wem gehört, wenn Sie eine Kopie davon erstellen.
Gehen Sie nun zurück zu diesem, löschen Sie den Kommentarvorgang.
Ich werde in den Header gehen und dann werde ich dies in das Token für den
Administrator ändern und dann versuchen, den gleichen DELETE-Vorgang auszuführen und dann sehen Sie
, dass selbst der Administrator nicht berechtigt ist, den Kommentar von einem anderen Benutzer zu löschen.
Das ist durchaus akzeptabel.
Aber lassen Sie uns versuchen, den gleichen Kommentar zu löschen,
von diesem Benutzer, der diesen
Kommentar erstellt hat, und Sie würden sehen, dass dies erfolgreich getan werden kann.
Also, lassen Sie uns diese Operation durchführen.
Um dies zu tun, werde ich zurückgehen und das Token holen, das ich
für den ersten Benutzer erhalten habe, und dann das Autorisierungsfeld ändern.
Nun, für diese DELETE-Operation,
werde ich dies in Bearer ändern,
und dann ist dies das Token für den ersten Benutzer mit dem Benutzernamen Jogesh.
Wenn ich also versuche, diesen Kommentar zu löschen,
werden Sie feststellen, dass der Kommentar jetzt erfolgreich gelöscht wird.
Wie Sie aus den Schritten sehen können,
kann der Kommentar nur von dem Benutzer gelöscht werden, der diesen Kommentar erstellt hat.
Nun, der nächste Schritt,
wenn wir den Löschvorgang auf dem Geschirr durchführen,
sahen wir früher, dass, wenn wir den Löschvorgang als gewöhnlicher Benutzer durchgeführt haben,
eine Meldung erhalten, die besagt:
„Sie sind nicht berechtigt, diesen Vorgang auszuführen!“
Also, ich werde dieses Token in das Token des Admins ändern und
Ihnen dann zeigen, dass ein Administrator die DELETE-Operation für das Geschirr und den Topf ausführen kann.
Also, in diese Anfrage gehen,
lassen Sie mich das Token ändern, um das Token für den Admin-Benutzer zu sein.
Wenn ich also den DELETE-Vorgang als Admin-Benutzer durchführe,
werden Sie feststellen, dass der DELETE-Vorgang
erfolgreich ist und dann mit der Nachricht hier antwortet.
Nun, wenn ich ein GET auf dem Geschirr Endpunkt mache,
werden Sie feststellen, dass die GET-Operationen zeigen, dass meine Gerichte geleert wurden.
Nun, die andere Operation, die Sie auch in dieser Zuweisung implementieren,
ist, dass wir eine GET-Operation auf dem Schrägstrich Benutzer Endpunkt durchführen können.
Wenn Sie also eine GET-Operation auf dem Endpunkt des Schrägstrichbenutzers ausführen,
werden Sie feststellen, dass Sie nicht berechtigt sind,
diesen Vorgang auszuführen, wenn Sie kein autorisierter Benutzer sind.
Also, der localhost: 3000/users/endpoint, Sie
werden jetzt zulassen, dass dies nur vom Administrator durchgeführt wird.
Also, wenn ein gewöhnlicher Benutzer,
wenn Sie sich als gewöhnlicher Benutzer mit dem Header anmelden,
werden Sie nicht berechtigt, diesen Vorgang auszuführen.
Nun, lassen Sie mich dieses Token in das Token
vom Administrator ändern und dann werden Sie sehen, dass
der Administrator diesen Vorgang ausführen kann.
Also, um zum GET zu gehen,
lassen Sie mich dieses Token in das Token für
den Admin-Benutzer ändern und dann, wenn ich die GET-Operation dafür durchführe, gibt es zurück.
Wie Sie sehen können, die drei Benutzer, die in meinem System registriert sind,
zeigt es den Benutzer Nummer eins,
Benutzer Nummer zwei und Benutzer Nummer drei.
Beachten Sie natürlich, dass Hash und Salz entfernt werden,
wenn die Nachricht von der Serverseite an die Client-Seite zurückgegeben wird.
Also, die Hash- und Salz-Informationen werden nie draußen offenbart.
Also, Mongos kümmert sich automatisch darum
, diese Informationen herauszufiltern, bevor es die Informationen des Benutzers zurücksendet.
Also, weil Sie die Hash- und
Salz-Informationen nicht an die Außenwelt weitergeben sollten.
Dies ist also die drei Benutzerkonteninformationen, die zurückgegeben werden.
Dies wird also nur zurückgegeben, wenn Sie den GET-Vorgang auf dem
Endpunkt des Schrägstrichbenutzers als Admin-Benutzer ausführen.
Wenn Sie die gleiche Anfrage wie andere Benutzer ausführen,
ist dies nicht zulässig.
Also, wieder werden Sie zuerst überprüfen,
VerifyUser und dann überprüfen Sie die VerifyAdmin und nur, wenn es ein Administrator ist,
dann kann dieser Vorgang an diesem Endpunkt ausgeführt werden.
Dies sind also all die verschiedenen Aufgaben, die Sie als Teil dieser Aufgabe ausführen werden.
Die Einzelheiten, wie diese zu erledigen sind, sind in den Zuweisungsanweisungen dokumentiert.
Lesen Sie sich also die Anweisungen durch, bevor Sie mit der dritten Aufgabe fortfahren.
Viel Spaß beim Abschluss der dritten Aufgabe.