Nun, da wir die tokenbasierte Authentifizierung mit den JSON-Web-Token
verstanden haben und auch die Vorteile der Verwendung dieses Ansatzes verstanden haben.
Die Tatsache, dass wir jetzt einen Rest-API-basierten Server erstellen,
bedeutet in diesem Kurs, dass
die JSON Web Token basierte Authentifizierung
am besten für diesen Server geeignet ist, den wir erstellen.
Lassen Sie uns also unseren Rest API-Server aktualisieren, um JSON-Web-Token in dieser Übung zu verwenden. Um mit
der Aktualisierung des Servers an Ihrem Terminal zu beginnen,
installieren wir zuerst das JSON Web Token und das Passport JWT Node Modul.
Also, an der Eingabeaufforderung geben Sie npm, installieren,
Pass JWT JSON Web Token und minus sparen.
Wie Sie sehen können, verwende ich JSON Web Token 8.3.0 und Pass JWT 4.0.0 in diesem Kurs.
Nun, da wir die Installation abgeschlossen haben, lassen Sie uns fortfahren und unseren Express-Server aktualisieren.
Gehen wir jetzt zu unserem Code,
lassen Sie uns eine Datei namens
conflict.js im Stammordner unseres Projekts hinzufügen.
Nun, diese conflict.js Datei werde ich es verwenden,
um einige Konfigurationsinformationen für unseren Server zu speichern.
Nun, dies ist eine Möglichkeit, die gesamte Konfiguration für unseren Server zu zentralisieren.
Lassen Sie mich in dieser Datei conflict.js ein JSON-Objekt hier exportieren.
Also sagen wir, SecretKey,
und hier
werde ich den geheimen Schlüssel angeben, den ich zum Signieren meines JSON-Web-Token verwenden werde,
und lassen Sie mich hier auch eine Mongo-URL angeben,
die die URL für
meinen MongoDB-Server localhost 27017 sein wird.
Sobald wir das abgeschlossen haben,
dann werden wir zu authenticate.js Datei gehen,
und in authenticate.js Datei werden wir
jetzt die JWT Strategie erstellen.
Dies ist die JSON Web-Token Strategie, die von
unserem Pass JWT Knotenmodul zur Verfügung gestellt wird, das wir gerade aufgenommen haben und so werden wir sagen,
Generativitätsstrategie Pass generativity.strategy.
Dies wird uns
eine JSON Web Token basierte Strategie zur Konfiguration unseres Passport-Moduls bieten und
dann JWT extrahieren, die ich
auch von Pass JWT bekommen werde.
Wir brauchen Pass JWT,
dann sagen wir „Extrahieren JWT“.
Dann lassen Sie uns
das JSON Web Token-Modul importieren
, das wir gerade installiert haben.
Sobald wir diese importiert haben,
lassen Sie uns fortfahren und beginnen, ein paar Dinge zu konfigurieren.
Lassen Sie mich zusammen mit diesen die Konfiguration importieren, die ich
die Datei config.js erstellt habe, die ich gerade meinem Projekt hinzugefügt habe.
Sobald ich das abgeschlossen habe, lassen Sie mich weitermachen und
ein paar zusätzliche Funktionen vorstellen, die ich von hier exportieren werde.
Wir werden sagen, exports.GetToken,
diese Funktion, wenn Sie dort einen Parameter bereitstellen, den ich einfach den Benutzer aufrufen
werde, der ein JSON-Objekt sein wird,
wird dies das Token erstellen und es für uns geben.
Um das Token zu erstellen, verwenden wir das jsonwebtoken-Modul, das wir gerade importiert haben.
Also, hier werden wir sagen, return jwt.sign,
das hilft uns, das JSON Web Token zu erstellen und so innerhalb, dass es
mir erlaubt, die Nutzlast zu liefern und
die Nutzlast hier kommt als Parameter hier namens user,
und dann ist der zweite Parameter der
geheime oder private Schlüssel, den ich von der Konfiguration bekomme. geheimen Schlüssel
, den ich gerade ein wenig früher konfiguriert habe.
Wir können hier zusätzliche Optionen anbieten.
Eine Option, die ich dazu liefern werde, ist...
Okay, lassen Sie mich zur nächsten Zeile hier gehen,
die Option, die ich liefern werde, ist ExpiResin.
Das ExpiResin wird Ihnen sagen, wie lange das jsonwebtoken
gültig sein wird, also sage ich in diesem Fall 3,600 Sekunden oder etwa eine Stunde.
Eine Stunde später müssen Sie das jsonwebtoken erneuern.
Eine Stunde ist lang genug, um unsere Anwendung testen zu können.
Sie können dies so einstellen, dass es viel länger ist, wenn Sie sich dafür entscheiden.
In einer echten Anwendung können Sie dies auf einen viel längeren Wert einstellen, vielleicht
ein paar Tage und erwarten, dass sich der Benutzer alle paar Tage erneut authentifiziert.
Jetzt werden wir auch als nächstes
die jsonwebtoken basierte Strategie für unsere Passanwendung konfigurieren.
Lassen Sie mich also eine Variable namens opts deklarieren,
was nichts anderes als die Optionen ist, die ich für meine JWT-basierte Strategie angeben werde.
Also werden wir sagen, entscheidet sich JWTFromRequest.
Nun gibt diese Option an,
wie das jsonwebtoken aus der eingehenden Anforderungsnachricht extrahiert werden soll.
Dies ist, wo wir den Extrakt JWT verwenden.
Dieser Extrakt JWT unterstützt verschiedene Methoden
zum Extrahieren von Informationen aus dem Header.
Es wird von AuthHeader von AuthHeader als Bearer-Token sagen,
vom Header welches Schema und so weiter.
Wenn Sie die Dokumentation lesen, erfahren
Sie verschiedene Möglichkeiten, das jsonwebtoken zu extrahieren.
Sie können das Token im Hauptteil
der eingehenden Anforderungsnachricht übergeben und dann können Sie es von dort extrahieren,
Sie können auch benutzerdefinierte Extraktoren verwenden usw.
In diesem Kurs werde ich die einfachste Methode verwenden, die
vom Authentifizierungsheader als Bearer-Token aufgerufen wird.
Wir sind bereits mit
dem Authentication Header vertraut, weil wir das mit
der grundlegenden Authentifizierung und der Cookie-basierten Authentifizierung früher verwendet haben.
Also, ich werde nur
das gleiche Header-Feld in der Anforderungsnachricht verwenden, um das jsonwebtoken zu tragen.
Also werde ich sagen, dass sich als Bearer-Token jsonwebtoken entscheidet.
Der nächste, den wir sagen, Opts.SecretorKey,
dies ist der zweite Parameter, der mir hilft
, den geheimen Schlüssel zu liefern, den ich in meiner Strategie für die Anmeldung verwenden werde.
Das ist also die andere Option, die ich hier angeben werde.
Sobald ich diese beiden angegeben habe,
lassen Sie mich die Passport-Strategie exportieren,
die ich hier konfigurieren werde, so dass wir ExportJWTPassport sagen,
dann sagen wir passport.use.
Erinnern Sie sich an die Art und Weise, wie Sie die lokale Strategie zuvor angegeben
Hier spezifizieren wir die JWT-basierte Strategie,
dann werden wir eine neue JWT-Strategie erstellen,
daran erinnern, dass wir gerade die JWT-Strategie
hier importiert haben, das ist, was wir verwenden werden, um eine neue Strategie zu erstellen.
Diese JWT-Strategie nimmt
das Optionsobjekt, das ich gerade als ersten Parameter erstellt habe.
Die Strategieoptionen und die zweite ist die Verifizierungsfunktion, die ich liefern muss,
und so die Verifizierungsfunktion werde ich es in der nächsten Zeile hier liefern,
sagen wir FunctionJWT_Payload.
Fertig. Wenn diese Funktion aufgerufen wird, ist
der Callback, der durch den Pass bereitgestellt wird.
Also, wenn Sie einen Reisepass haben, den Sie mit einer neuen Strategie konfigurieren,
müssen Sie den zweiten Parameter fertig angeben.
Durch diesen fertigen
Parameter werden Sie Informationen an den Reisepass zurückgeben, die er dann
zum Laden von Dingen auf die Anforderungsnachricht verwenden wird.
Wenn der Pass also die Anforderungsnachricht analysiert,
wird er die Strategie verwenden und dann Informationen extrahieren
und dann in unsere Anforderungsnachricht laden.
Also, da dies eine Funktion ist,
werde ich hier nur eine Pfeilfunktion verwenden,
ich habe Pfeilfunktionen geliebt.
Lassen Sie mich das also als Pfeilfunktion hier erstellen,
und innerhalb dieser Funktion
werden wir die Funktion definieren.
Also, was machen wir innerhalb der Funktion?
Lassen Sie mich eine console.log von
JWT Payload machen und dann
lassen Sie mich einfach die hier einkommende Option ausloggen,
die JWT Payload Option kommt hier,
so dass Sie sehen können, was in der JWT Payload ist.
Dann werden wir nach einem Benutzer suchen, indem wir User.findone sagen,
und dann weiß ich, dass es in der jwt.payload
ein ID-Feld gibt, das eingeht.
Also, das werde ich hier als ID-Feld zuweisen.
Also, ich werde sagen, User.Findone und der zweite
ist eine Callback-Funktion.
Wie Sie erkennen, dieser Benutzer Mongoose Methode und Sie versuchen zu finden.
Also, wir werden sagen, wenn irre dann, Rückkehr getan.
Was hat das gemacht? Dies geschieht ist der Rückruf, den
Pass in Ihre Strategie hier übergehen wird.
Also werden wir diese fertige Funktion aufrufen.
Dies geschieht im Reisepass nimmt drei Parameter.
Also, Sie können die drei Stücke von Informationen sehen, die dies getan erwartet, es sagt, Fehler: alle.
Also, wenn Sie einen Fehler haben, werden Sie ihn als ersten Parameter übergeben.
Der zweite Parameter, Benutzer? ,
Wenn ein Benutzer existiert,
dann wird der Benutzerwert übergeben und dann, wenn irgendwelche Informationen? :, beliebig.
Also, diese beiden sind optionale Parameter und
wenn Sie Informationen übergeben,
dann wird das innerhalb der Anwendung verwendet.
Wenn ich false als zweiten Parameter übergebe,
bedeutet das, dass der Benutzer nicht existiert oder das.
Es wird also interpretieren, dass der Benutzer nicht existiert.
Also, ich könnte sagen, äh,
falsch, weil dies ein Fehler ist.
Also, ich werde dort keinen Benutzerwert übergeben,
ich werde nur falsch übergeben.
Dort, die nächste,
können wir sagen, sonst wenn (Benutzer).
Also, wenn der Benutzer nicht null ist,
sagen wir return done (null).
Es gibt keinen Fehler, also wird der erste Parameter
null sein und der zweite Parameter ist der Benutzer,
aber wir haben gerade von der MongoDB bekommen.
Andernfalls werden wir
mit null, false zurück.
Also, im letzten Fall
konnten wir den Benutzer nicht finden,
also werden wir falsch übergeben.
Also, wir werden es so behandeln.
Wenn Sie möchten, können Sie an dieser Stelle ein neues Benutzerkonto erstellen,
aber ich werde dies einfach halten, nur damit es für uns leicht zu verstehen ist.
Also, wir sagen einfach, null, falsch. Das sind sechs.
Also, das ist die JSONWebToken Passstrategie, die ich gerade hier konfiguriert habe.
Lassen Sie mich auch
eine weitere Funktion von hier namens VerifyUser exportieren.
Nun, diese VerifyUser-Funktion,
werde ich es verwenden, um einen eingehenden Benutzer zu überprüfen.
Also, hier werde ich passport.authenticate verwenden.
Also, die passport.authenticate, die Strategie ist jwt-Strategie, die ich gerade konfiguriert habe,
die JSONWebToken-Strategie, die ich gerade konfiguriert habe.
Dann, der zweite Teil,
würde ich sagen, Sitzung: falsch.
Das bedeutet also, dass
wir in diesem Fall keine Sitzungen erstellen werden.
Wie Sie sich erinnern, eine umgekehrte Anwendung,
verwenden wir Token-basierte Authentifizierung.
Also werden wir keine Sitzungen erstellen.
Deshalb habe ich diese Optionssitzung hier auf false gesetzt,
und natürlich hat die erste die Strategie angegeben, die ich verwenden werde.
Also, um einen Benutzer zu verifizieren,
werde ich die JWT-Strategie verwenden.
Wie funktioniert die JWT-Strategie?
In der eingehenden Anfrage
wird das Token in den Authentifizierungs-Header aufgenommen, wie wir hier gesehen haben.
Wir sagten, Authentifizierungs-Header als Bearer-Token.
Wenn das enthalten ist, wird das extrahiert und das wird
verwendet, um den Benutzer basierend auf dem Token zu authentifizieren.
Geringfügige Korrektur hier sollte dies user.findone_id ist gleich jwt_payload. _id,
da dies der ID-Wert ist, der sich innerhalb der Nutzlast meines JSONWebToken befindet.
Also suchen wir nach dem Benutzer mit dieser angegebenen ID.
Also, sobald wir dies abgeschlossen haben, dann jetzt,
der zweite Teil, den wir tun müssen, ist, dass wir das Token irgendwo erstellen müssen.
Nun, wo erstellen wir das Token?
Also, hier ist etwas, das wir in der Datei users.js tun, sehr nützlich für uns.
Erinnern Sie sich in der Datei users.js, dass Sie bereits diesen Endpunkt namens login haben.
Auf dem Anmeldeendpunkt
haben Sie den Benutzernamen und das Kennwort verwendet, um den Benutzer zu authentifizieren.
Selbst mit dem JSONWebToken, um das JSONWebToken
auszugeben, müssen Sie zuerst den Benutzer mit einer der anderen Strategien authentifizieren,
und wenn Sie zuerst die lokale Strategie verwenden,
werden wir den Benutzer mit dem Benutzernamen und dem Passwort authentifizieren.
Sobald der Benutzer mit dem Benutzernamen und Passwort authentifiziert ist,
werden wir das Token an den Benutzer ausgeben und sagen:
„Okay, Sie sind ein gültiger Benutzer,
ich werde Ihnen das Token geben“.
Alle nachfolgenden Anfragen tragen einfach das Token
in der Kopfzeile der eingehenden Anforderungsnachricht.
Früher haben wir Sessions erstellt.
Wenn der Benutzer authentifiziert ist,
werden wir keine Sitzungen mehr verwenden.
Stattdessen werden
wir, wenn der Benutzer mit der lokalen Strategie authentifiziert wird, ein Token an den Benutzer ausgeben.
Also, in dieser router.post-Methode, die wir auf diesem /login Endpunkt gemacht haben,
werde ich ein Token erstellen und dieses Token an den Benutzer zurückgeben.
Also, hier, werden wir sagen, ein router.Post.
Lassen Sie mich ein Token erstellen.
Um ein Token zu erstellen,
haben wir diese Funktion im Authentifizierungsmodul namens Authenticate.GetToken.
Also, erinnern Sie sich, dass wir bereits,
um das natürlich nutzen zu können,
noch bevor wir dort anfangen,
Ich muss die Authentifizierung importieren.
Modul hier. Also, wir werden sagen, authentifizieren erfordern. /authentifizieren.
Also, wenn in Ihrem Code hier,
können wir jetzt Authenticate.getToken sagen,
und der GetToken nimmt Parameter hier.
Nun, erinnern Sie sich, gehen Sie zurück authenticate.js Datei.
Die Datei authenticate.js nimmt hier einen Parameter
, der als Nutzlast verwendet wird, wenn Sie das JSONWebToken erstellen.
Also, in der Datei users.js
werde ich ein Token erstellen, indem ich eine Payload gebe,
die nur die ID des Benutzers enthält.
Also, wir sagen id: req.user. _id.
Das reicht aus, um das JSONWebToken zu erstellen.
Wir möchten keine weiteren Informationen des Nutzers hinzufügen.
Wenn Sie sich entscheiden, können Sie andere Teile der Benutzerinformationen einschließen,
aber ich würde vorschlagen, dass Sie den JSONWebToken klein halten.
Die Benutzer-ID reicht aus, denn wenn Sie nach dem Benutzer suchen müssen,
reicht die Benutzer-ID aus, um in der MongoDB nach dem Benutzer zu suchen.
Also, ich werde nur die ID des Benutzers hier codieren.
Nun wissen Sie, dass der req.user bereits vorhanden wäre,
denn wenn passport.authenticate ('local') den Benutzer erfolgreich authentifiziert,
wird dies die Benutzereigenschaft in die Anforderungsnachricht laden.
Deshalb bin ich in der Lage, das hier zu tun.
Also, das werde ich verwenden, um das Token zu erstellen.
Sobald das Token erstellt wurde,
möchte ich dieses Token an den Benutzer zurückgeben.
Also, in dem rest.json-Objekt, das ich hier
bereitstelle, trage ich bereits die wahre Erfolgsflagge und auch
eine Statusmeldung hier.
Lassen Sie mich das Token
als eine der Eigenschaften in der Antwortnachricht hier hinzufügen.
Also, das Token, das ich gerade erstellt habe,
werde ich das als zweite Eigenschaft innerhalb dieser Json-Zeichenfolge hier zurückgeben.
Also, wenn mein Client diese Json-Zeichenfolge im Hauptteil der Antwortnachricht empfängt,
kann er eingehen und das Token von dort extrahieren.
Das war's. So haben wir jetzt die Datei users.js aktualisiert,
und Sie können jetzt sehen, wie das Token
erstellt und an den Benutzer zurückgesendet wird, wenn der Benutzer erfolgreich authentifiziert wurde.
Jetzt kann dieses Schema auch verwendet werden,
wenn Sie Drittanbieter-Authentifizierung wie basierend auf OAuth 2.0 verwenden,
die wir im nächsten Modul untersuchen werden.
Jetzt wird das Verfahren ähnlich sein.
Sie erstellen ein Token, wenn der Benutzer vom
Drittanbieter- oder OAuth-Authentifizierungsanbieter authentifiziert
wird, und dann übergeben Sie das Token an den Benutzer zurück,
in einem ähnlichen Ansatz, wie Sie hier sehen.
Jetzt, sobald wir dies getan haben,
dann gehen wir zu app.js Datei.
In app.js Datei, weil wir hier eine Konfigurationsdatei enthalten haben.
Also, lassen Sie mich die Konfigurationsdatei hier benötigen,
und dann die URL, die ich hier verwende, anstatt diese URL zu hardcodieren,
werde ich config.mongoURL sagen.
Jetzt sehen Sie, wie meine Datei config.js als
zentralisierter Ort verwendet werden kann, an dem ich die Konfiguration für meine Anwendung vorbereiten kann.
Das war's. Was jetzt passiert, ist, dass, wenn
sich der Benutzer auf dem /login-Endpunkt authentifiziert und der Benutzer erfolgreich authentifiziert
wird, das Token vom Server erstellt und an den Client oder den Benutzer zurückgesendet wird.
Daher wird der Client das Token in
jede nachfolgende eingehende Anforderung in den Autorisierungs-Header aufnehmen.
Nun, wie enthält es den Autorisierungs-Header?
Gehen wir zurück zu authentic.js und hier
sehen Sie, dass wir hier ExtractJWT.fromAuthHeaderAsBearerToken gesagt haben.
Dies wird also in den Authentifizierungsheader als Bearer-Token enthalten sein.
Ich zeige Ihnen, wie das gemacht wird,
dann verwenden wir Postman, um das Bearer-Token in den Authentifizierungs-Header aufzunehmen.
Nun, wenn dies eintritt,
dann erinnern Sie sich, dass
Sie unten hier diese Methode hier namens VerifyUser konfiguriert haben,
die die Passauthentifizierung mit JWT aufruft.
Also, dieser verwendet das Token, das
in der Authentifizierungsheader kommt und überprüft dann den Benutzer.
Also, jedes Mal, wenn ich die Authentizität des Benutzers überprüfen möchte,
kann ich einfach verify user aufrufen,
und das wird den Aufruf an den passport.authenticate initiieren und den SSER überprüfen.
Wenn dies erfolgreich ist,
wird es mir erlauben, fortzufahren.
Diese Prozedur ähnelt dem, was Sie in der
Datei users.js getan haben, wo Sie denselben passport.authenticate ('local') aufrufen.
Also, wenn das erfolgreich ist,
dann gehst du vorwärts.
Wenn dies fehlschlägt, gibt die Authentifizierungsfunktion die Fehlermeldung an den
Client zurück, der besagt, dass der Benutzer nicht autorisiert ist.
Also, das ist schon gesorgt.
Nun, da wir dies in meine authenticate.js Datei aufgenommen haben,
an jedem Ort, an dem ich den Benutzer überprüfen möchte,
kann ich einfach
diese VerifyUser-Funktion aufrufen, die
ich hier angegeben habe, oder den Export, den ich hier angegeben habe
, den wir auf den passport.authenticate mit
die JWT-Strategie, um den Benutzer zu authentifizieren.
Nun, wie nutzen wir das?
Nun, was wir tun werden, ist, dass wir in jeden einzelnen unserer Router gehen
und die Optionen auf allen Routen steuern, die wir kontrollieren wollen.
Also, zurück zur Datei app.js, jetzt,
dass wir keine Sitzungen verwenden, werde ich diese Sitzung von hier entfernen,
weil wir keine Sitzungen mehr verwenden.
In ähnlicher Weise werde ich diesen passport.session auch von hier entfernen.
Das ist auch nicht nötig.
Diese Authentifizierung, siehe oben,
als ich diese Authentifizierung konfiguriert habe,
wurde diese Authentifizierung auf jede einzelne eingehende Anforderung angewendet.
Jetzt werde ich meine Anwendung ändern,
wobei ich die Authentifizierung nur auf bestimmten Routen und nicht auf allen Routen erfordern werde.
Also, lassen Sie mich diese Authentifizierung vollständig aus app.js entfernen.
Also, wenn die Anfrage eingeht,
wenn sie auf/Endpunkt ist,
wird der Index bereitgestellt.
Wenn es sich am Endpunkt /users befindet, können Sie zu
den verschiedenen Routen navigieren, die auf der /users in der users.js
und anschließend zu den restlichen Routen eingehängt sind.
Was ich jetzt tun werde, ist, dass ich
den öffentlichen Ordner offen lassen werde, damit jeder Zugriff hat.
In vielen Anwendungen
kann dies in Ordnung sein.
Also werde ich das offen lassen.
Nun, auf die Gerichte,
Promotionen, und der Endpunkt der Führer,
Alle Get-Anfragen.
Ich werde diese ohne Authentifizierung antworten lassen.
Warum sollte ich das tun wollen?
Wenn ein Benutzer eine Get-Anforderung
ausführt, möchte der Benutzer nur Informationen abrufen.
Also, zum Beispiel, auf der Client-Seite, wenn ich eine Webanwendung mit Angular
oder einer Client-Anwendung mit Ionic oder nativem Skript implementiere,
dann möchte ich meine App vielleicht
so implementieren, dass die Hauptseite bereits Informationen anzeigt,
die genetischen Informationen, die Sie möchten Stellen Sie jedem zur Verfügung, der
Ihre Website besucht oder Ihre App öffnet.
So können dort grundlegende Informationen angezeigt werden.
Wenn Sie jedoch etwas ändern möchten,
erwarten Sie, dass der Benutzer authentifiziert wird.
So erlauben Sie POST-Operationen, Put-Operationen
und Löschvorgänge nur von authentifizierten Benutzern ausgeführt werden.
In ähnlicher Weise
können Sie beispielsweise für Kommentare sagen, dass Kommentare nur von authentifizierten Benutzern gepostet oder geändert werden können.
So können Sie nur einige Routen für authentifizierte Benutzer einschränken,
die andere Route können Sie sie offen lassen. Wie machen wir das?
Jetzt ist dies, wo der Benutzer überprüfen, dass wir
aus authenticate.js Datei exportiert haben, nützlich ist.
Jetzt, anstatt alle Endpunkte,
alle verschiedenen Operationen auf die Gerichte, Aktionen
und Führer in Punkten zu kontrollieren,
werden wir nur die Get-Operationen für jedermann öffnen,
aber die Post, Put-
und Löschvorgänge werden nur auf authentifizierte Benutzer beschränkt.
In der Zuweisung fügen Sie eine weitere Kategorie von Benutzern hinzu, die Admin-Benutzer genannt werden.
Jetzt würden Sie bestimmte Vorgänge einschränken, die nur von Administratorbenutzern ausgeführt werden.
So, zum Beispiel, das Ändern der Gerichte
oder das Löschen der Gerichte Informationen aus der Datenbank,
wird nur auf Admin-Benutzer beschränkt sein.
Aber grundlegende Benutzer können Kommentare posten,
die Kommentare ändern, die sie gepostet haben,
und vielleicht sogar einige Lieblingsgerichte speichern.
Wir machen diesen Teil im vierten Modul.
Nun, wie steuern wir bestimmte Routen?
Hier müssen wir in jeden der Router gehen
und dann Kontrollen auf bestimmten Routen importieren.
Also, lassen Sie uns mit der Geschirr Route beginnen.
Also, für die Gerichte Route,
werden Sie sich erinnern, dass dies in der Datei dishRouter.js gesteuert wird.
Also, gehen Sie zu dishRouter.js,
lassen Sie uns zuerst die Authentifizierung hier importieren.
Also werden wir sagen, const authenticate
require../authentifizieren, weil
sich diese authenticator.js Datei im Ordner der höheren Ebene befindet.
Also, denken Sie daran../authentifizieren Sie sich hier.
Also, sobald Sie die Authentifizierung importieren,
für die Dish-Router-Route für diese Route,
die Get-Operation, werde ich ohne Probleme zulassen.
Also, das ist offen.
Also werde ich keine Einschränkung auferlegen.
Von der Post, wenn wir mehrere Middleware anwenden möchten,
können wir einfach die Haupt in diesem einen hinter dem anderen hinzufügen.
Jetzt, wenn der Beitrag aufgerufen wird, führen
Sie gerade jetzt einfach diese Funktion hier aus.
Jetzt kurz davor
kann ich hineingehen und sagen, Authenticate.verifyUser, dort.
Also, was macht das?
Dies besagt, dass, wenn eine Post-Anfrage hereinkommt,
ich zuerst diese Middleware ausführen würde,
die ich aus der Datei authentic.js exportiert habe.
Ich wende das zuerst
an, was entspricht, dass Pass authentifizieren JWT und Sie überprüfen den Benutzer.
Dann, wenn das erfolgreich ist,
dann werde ich den Rest davon machen.
Wenn die Authentifizierung zu diesem Zeitpunkt fehlschlägt,
antwortet die Passauthentifizierung
dem Client mit der entsprechenden Fehlermeldung.
Das wird also bereits durch Passauthentifizierung gehandhabt,
also muss ich mir nichts darüber hinaus Sorgen machen.
Wenn ich diese Middleware überschritten habe und dann
die nächste Funktion ausführen kann, bedeutet das, dass meine Authentifizierung erfolgreich war,
also kann ich von diesem Punkt aus vorwärts gehen.
Dies wirkt also als Barriere für diese Post-Methode.
Jetzt mit dem gleichen Argument
kann ich diese bestimmte Middleware einfach auf alle anderen Methoden anwenden.
Das kann ich dem Putt antun.
Obwohl in diesem Fall,
Put wird nichts tun.
Aber in jedem Fall
werde ich einfach nur aus Gründen der Einheitlichkeit,
Ich werde den verifizierenden Benutzer anwenden, um auch zu setzen und natürlich,
zum Löschen auch, werde ich setzen anwenden.
In ähnlicher Weise, wenn ich auf die /dishid
gehe, werde ich zulassen, dass ohne Probleme funktioniert.
Posten, Ich werde den Verifizierungsbenutzer anwenden.
Setzen Sie auch ich werde den Benutzer verifizieren und zum Löschen auch dasselbe anwenden.
Für die /dishid/comments werde ich das get open lassen,
es ist in Ordnung für jeden, Kommentare zu einem bestimmten Gericht abzurufen.
Post, ich werde dies schließen,
so dass nur verifizierte Benutzer Kommentare posten können.
Setzen Sie auch ich werde das schließen und auch löschen.
Sie müssen einen Schritt weiter gehen und sagen:
„Nur die Benutzer, die den Kommentar gepostet haben, können ihre eigenen Beiträge löschen.“
Aber das werden wir im nächsten Modul tun.
Im Moment werde ich sagen:
„Okay, ein verifizierter Benutzer kann jeden Kommentar löschen.“
Das ist natürlich nicht wahr,
wir können zusätzliche Kontrollen vornehmen,
aber wir werden das im nächsten Modul dieses Kurses tun.
Also, zum Löschen auch wende ich dasselbe an.
Auch hier, für den Teller Router Kommentare/Kommentare Id,
bekomme ich es als offen lassen.
Post, ich werde es geschlossen lassen.
Setzen Sie auch schließen Sie es ab und dann zum Löschen werde ich auch das schließen.
Löschen Sie natürlich, wie gesagt,
der Löschvorgang sollte nur einem Benutzer erlaubt werden,
der den Kommentar erstellt hat, sollte gebeten werden, das
zu löschen, aber Sie müssen ein paar zusätzliche Dinge einrichten, damit das korrekt funktioniert,
was wir im nächsten Modul tun werden.
Im Moment sagen wir, dass ein verifizierter Benutzer einen bestimmten Kommentar löschen kann, das war's.
Jetzt werden wir das gleiche Prinzip auf den Promo-Router und auch den Leader Router anwenden.
Also, gehen Sie in den Promo-Router,
lassen Sie mich importieren authentifizieren
und dann bekommen ist offen,
also ist dies Leader Router.
Also, get ist offen.
Post, Ich werde zu kontrollieren, dass,
setzen, steuern, löschen, steuern,
Führer Router, Führer ID,
bekommen ist in Ordnung, Post
, gesteuert, setzen wird gesteuert und löschen gesteuert.
Das Gleiche mit Promo-Router.
Lassen Sie mich, fordern Sie die Authentifizierung
und dann für die Route get ist offen,
POST wird gesteuert, Put wird gesteuert,
Löschen wird gesteuert, dasselbe für die Promorouter/PromoID.
Get ist offen, POST wird gesteuert,
setzen und löschen werden ebenfalls gesteuert, das ist es.
Speichern wir alle Änderungen.
Sobald wir alle Änderungen abgeschlossen haben,
speichern wir die Änderungen.
Jetzt ist unsere Anwendung bereit, getestet zu werden.
Also, lassen Sie uns gehen und unseren Server neu starten,
oder wenn der Server nicht läuft,
starten wir einfach den Server.
Wenn ich zum Terminal gehe,
läuft mein Server nicht.
Also, lassen Sie mich den Server starten, indem Sie npm start eingeben.
Interessanterweise hat es hier nur einen Fehler ausgelöst,
ich wollte Ihnen nur zeigen, dass selbst ich Fehler machen kann,
also werden Sie sehen, dass es hier einen Fehler gibt, der sagt:
„Kann module.authenticate nicht finden“, und wenn ich dann den Code durchschaue,
finde ich, dass dieses Problem in der,
wo ist es vorgekommen?
Also, ich suche einfach hier,
und dann irgendwo hier unten,
bemerkte ich, dass dieses Problem in meiner users.js Datei aufgetreten ist.
Also, genau dort, heißt es,
das ist in der Datei users.js.
Also, gehen Sie in die Datei users.js, lassen Sie uns das beheben.
Wenn ich zur Datei users.js gehe, genau an der Spitze, als ich mich authentifizieren musste, sagte ich:
„.authenticate“, und wie ich Ihnen sagte,
sollte das ein Punktpunkt sein, weil es im oberen Ordner ist.
Diese Datei users.js im Ordner Routes
und authentifizieren befindet sich im Ordner Projects Route, also sollte dies Punktauthentifizierung sein.
Wenn du also Fehler machst, da gehst du,
so wirst du an den Fehler erinnert, den du eingeführt hast.
Also, speichern wir die Änderungen und starten Sie dann unseren Server neu.
Wieder, zurück zu diesem Terminal,
lassen Sie mich meinen Server starten und mein Server ist jetzt betriebsbereit,
gehen wir zu Postman und testen Sie dann unsere Anwendung.
Nun, in Postman, lassen Sie mich zuerst versuchen,
ein GET auf localhost zu tun: 3000/Gerichte und dann, wenn ich ein GET mache,
ist es erfolgreich, weil der GET-Endpunkt nicht gesteuert wird.
So kann ich ein GET auf Geschirr
machen, ich kann ein GET auf Promotionen machen,
und es funktioniert alles gut.
Aber wenn ich versuche, einen POST auf Geschirr zu machen,
so lassen Sie mich finden, wo ich einen POST auf Geschirr gemacht habe.
Hier habe ich einen POST auf Geschirr gemacht.
Also, als ich versuchte, einen POST auf Geschirr zu machen,
sagt es sofort unbefugt.
Also hat mein Passport-Modul erkannt, dass ich nicht autorisiert bin,
also darf ich dies nicht tun, also daran erinnert es mich.
Lassen Sie mich die Cookies von löschen,
falls Sie ein Cookie in Ihrem Postman finden, entfernen Sie einfach das Cookie,
das dem localhost entspricht
, weil dieses Cookie nicht mehr benötigt wird und nicht benötigt wird.
Also, selbst wenn ich das Cookie und dann POST entferne,
wird es immer noch nicht autorisiert sagen.
Also, ich bin nicht befugt, diese Operationen durchzuführen.
Also, ich muss mich einloggen.
Wenn Sie nun die vorherige Übung durchgeführt haben,
hätten Sie den Benutzer verlassen, den Sie zuvor angemeldet haben.
Zum Beispiel hätten Sie diesen bestimmten Benutzer in der vorherigen Übung angemeldet,
lassen Sie mich versuchen, denselben Benutzer erneut anzumelden und
mein Server sollte sich beklagen, dass userExistsError sagt, so dass der Benutzer existiert,
also muss ich mich nicht erneut anmelden.
Wenn Sie den Benutzer aus Ihrer MongoDB gelöscht haben,
melden Sie sich einfach noch einmal an und lassen Sie uns dann einloggen.
Also senden wir eine Login-Anfrage an diesen Endpunkt.
Wenn ich also die Anmeldeanforderung durch einen POST an den Endbenutzer sende,
beachten Sie, was von meinem Server zurückgegeben wird.
Sie bemerken sofort, dass Sie in der Antwortnachricht
zusammen mit dem Erfolgsflag und der Statusmeldung
auch hier ein Token erhalten.
Nun, dieses spezielle Token,
muss ich dieses Token kopieren,
denn in meinen nachfolgenden Anfragen
muss ich dieses Token enthalten.
Also, lassen Sie mich zu der rohen Version davon gehen und dass ich dieses Token kopieren werde.
Dieses Token ist nichts anderes als eine lange Zeichenfolge,
also lassen Sie mich dieses Token kopieren.
Wenn Sie nun neugierig sind, was in diesem Token enthalten ist,
kann das JSON Web Token untersucht werden.
Es gibt eine bestimmte Website, auf der Sie
Ihr JSON-Web-Token eingeben und dann tatsächlich überprüfen können, was sich innerhalb des JSON-Web-Token befindet.
Machen wir das als nächsten Schritt.
Geben Sie in einem Browserfenster einfach jwt.io ein und dies führt Sie zu dieser Website namens JSON Web Token jwt.io.
Wenn Sie sich erinnern,
hatte ich Ihnen in der Vorlesung die Struktur des JSON Web Token gezeigt
und Ihnen gezeigt, dass das JSON Web Token drei Teile enthält: den Header,
die Nutzlast und die Informationen dort.
Nun, in diesem Fall sind
die Informationen hier oben, also werde ich
mein JSON Web Token in diese linke Seite
einfügen, also lassen Sie mich das auswählen und dann mein JSON Web Token
in die linke Seite im kodierten Teil einfügen und dann auf der rechten Seite
zeigt es Ihnen genau, was ist innerhalb des JSON-Web-Token, das ich gerade erstellt habe.
Es sagt also, dass der Header diese beiden Informationen enthält.
Die Payload beachten Sie, dass es die ID
des Benutzers und dann die Signatur unten hier enthält.
Also, das ist, was in meinem JSON Web Token enthalten ist.
Zurück zu Postman,
lassen Sie mich jetzt versuchen, das Geschirr zu bekommen.
Also, wenn ich GET localhost: 3000/Gerichte sage,
wird es immer noch eine leere Zeichenfolge,
leeres Array hier zurückgeben, weil meine Datenbank es nicht enthält.
Also, lassen Sie mich ein Gericht in meine Datenbank posten.
Also, ich werde die POST-Operation wählen und im Körper
sehen Sie, dass ich mein Gericht hier habe.
In der Kopfzeile werde ich den neuen Header namens
Autorisierung hinzufügen und Sie erinnern sich, dass
Sie früher für die grundlegende Autorisierung Basic sagten und dann die Base 64-codierte Zeichenfolge dort hatten.
Wenn Sie Ihr JSON Web Token in den Autorisierungs-Header aufnehmen möchten,
da
wir in unserem Code die Autorisierung als Bearer-Token sagten.
Also, wenn Sie das Token in den Autorisierungskopf aufnehmen möchten,
sagen wir in der Autorisierung Bearer und dann fügen wir diese
Token-Zeichenfolge ein, die wir gerade von unserer eingehenden Anfrage kopiert haben.
Also fügen wir die Token-Zeichenfolge dort ein.
Also, das ist, was im
Autorisierungskopf meiner ausgehenden Anfrage hier enthalten sein wird,
ausgehende POST-Anforderung hier.
Beachten Sie also, dass die linke Seite Bearer sagt und die rechte Seite ist die Zeichenfolge,
das Token, das ich gerade von
dem Punkt kopiert habe, an dem ich mich angemeldet habe, und dann lasse ich die POST-Nachricht
jetzt senden und mein POST ist jetzt erfolgreich und dies wird in meine Datenbank geschrieben.
Nun, wenn Sie sicher sein möchten, dass es gepostet wurde,
lassen Sie uns ein GET machen und wenn Sie ein GET machen,
können Sie sehen, dass tatsächlich dieses Gericht in meine Datenbank eingefügt wurde, wie hier gezeigt.
So werden Sie JSON-Web-Token in Ihrer Anwendung verwenden.
Wenn Sie also einen POST-, PUT-
oder einen DELETE-Vorgang auf einem der Endpunkte ausführen müssen,
würden Sie einschließen.
Also, lassen Sie mich zurück zu dieser POST-Anforderung hier.
In der Kopfzeile werden Sie
dieses Autorisierungsfeld setzen und dann würde dies in der Autorisierung enthalten sein,
Sie starten es mit Bearer und dann die Token-Zeichenfolge,
nach diesem Bearer-Leerzeichen,
ein einzelnes Leerzeichen und dann die Token-Zeichenfolge, die darauf folgt.
So würden Ihre Anforderungsnachrichten
das JSON Web Token in der Kopfzeile der ausgehenden Anforderungsnachricht tragen.
Sie können das Token auch in den Textkörper der ausgehenden Anforderungsnachricht einschließen.
Nun, dafür müssen Sie
Ihren Express-Server konfigurieren, besonders das zusätzliche JWT in der
Datei authenticate.js, um es aus
dem Körper zu akzeptieren, so dass Sie sich daran erinnern, dass wir dort gesehen haben, dass
das zusätzliche JWT viele verschiedene Möglichkeiten unterstützt,
das JSON Web Token aus dem eingehenden -Anfrage.
Also, dort müssen Sie angeben,
wenn Sie es in den Körper aufnehmen wollen,
müssen Sie diese Informationen dort angeben.
Nun, die Details dazu, wie Sie das tun können, können Sie
die Passport JWT Modul-Dokumentation, um zu verstehen, wie dies geschieht.
In diesem Kurs werde ich das einfach im Autorisierungs-Header verwenden,
wie ich hier gezeigt habe, und das funktioniert für die meisten Fälle gut.
Wenn Sie nun eine Web-App, eine
Angular-App oder eine Ionic oder NativeScript-App entwickeln,
müssen Sie in der Lage sein,
diese App zu konfigurieren, wobei das JSON Web Token in den Autorisierungsheader aufgenommen wird.
In der letzten Lektion dieses Kurses
werde ich Ihnen zeigen, wie Sie den Client und den Server, den Client,
den Sie in den vorherigen Kursen entwickelt haben, mit
dem Server integrieren, den wir in diesem Kurs entwickelt haben.
Damit schließen wir diese Übung ab.
In dieser Übung haben wir gesehen, wie wir
unsere Anwendung für die Verwendung von JSON Web Token konfigurieren können,
und wir haben gesehen, wie wir die Authentifizierung des Benutzers mit dem JSON Web Token umgehen,
indem wir die Unterstützung des Passport-Moduls und des Passport JWT Moduls
und der JSON Web Token Node Module verwenden.
Damit schließen wir diese Übung ab.
Dies ist ein guter Zeitpunkt für Sie, ein Git Commit mit der Nachricht Passport JWT zu tun.