Nun, da wir über Cookies und Express-Sitzungen verstehen
, schauen wir uns in dieser Übung insbesondere Cookies an.
Wir werden sehen, wie wir die Cookie-Parser Middleware verwenden können,
um Cookies innerhalb unserer Express-Anwendung einzurichten und zu verarbeiten.
Wenn Sie zu unserer ConFusion Server Express-Anwendung zurückkehren,
an der wir bisher gearbeitet haben,
werden Sie ganz oben feststellen, dass der Cookie-Parser
bereits in unserer Express-Anwendung enthalten ist.
Wenn Sie den Cookie-Parser explizit installieren müssen,
müssen Sie nur „npm install cookie-parser minus save“ eingeben.
Aber da unser Express Generator bereits
den Cookie-Parser in unsere Express-Anwendung aufgenommen hat, die wir aus Gerüst gemacht
haben, brauchen wir diesen Schritt in dieser Übung nicht zu tun.
Sie sehen also, dass der Cookie-Parser bereits dort enthalten ist,
und wenn Sie dann nach unten scrollen,
würden Sie sehen, dass im Code direkt unten hier
sehen würden, dass der Cookie-Parser bereits in die Middleware aufgenommen wurde.
Nun, für diesen Cookie-Parser,
werden wir in dieser Übung signierte Cookies verwenden.
Also, für diesen Cookie-Parser
werde ich hier einen geheimen Schlüssel als Parameter bereitstellen.
Der geheime Schlüssel könnte eine beliebige Zeichenfolge sein,
also werde ich nur eine Zeichenfolge wie diese liefern, ich sage 12345-67890.
Es muss nichts Sinnvolles sein,
es ist nur ein Schlüssel, der von
unserem Cookie-Parser verwendet werden kann, um
die Informationen zu verschlüsseln und das Cookie zu signieren, das vom Server an den Client gesendet wird.
Also, sobald wir unsere Cookie-Parser eingerichtet, um signierte Cookies zu behandeln,
so dann innerhalb der Autorisierung selbst,
so dass Sie sehen, dass wir die Autorisierung haben, die wir hier eingebaut haben.
Nun, innerhalb der Autorisierung,
was wir tun werden, ist,
dass der Benutzer das erste Mal versucht, auf den Server zuzugreifen,
erwarten wir, dass der Benutzer sich selbst autorisiert.
Danach setzen wir das Cookie auf der Clientseite vom Server aus und
dann muss der Client nicht
explizit weiter die grundlegenden Authentifizierungsinformationen senden.
Stattdessen muss der Client das Cookie einfach in die ausgehende Anfrage aufnehmen.
Da wir hier signierte Cookies verwenden, so,
wenn die eingehende Anfrage kommt in,
so werden wir das innerhalb der Autorisierung behandeln.
Nun erinnern Sie sich, dass wir hier bereits die Autorisierungs-Middleware eingerichtet haben.
Also, wir werden diese Autorisierungs-Middleware ändern, um die Verwendung von
Cookies anstelle der Autorisierungs-Header zu machen.
Also, was wir hier tun werden, ist, dass
wir sagen „console.log“ und dann werden wir,
„console.log (req.signedCookies)“, so dass wir sehen, was tatsächlich
in der signierten Cookie enthalten ist hier.
Nun, auch danach,
was wir tun werden, ist, dass wir sagen: „Wenn (! Req.signedCookies.user)“.
Der Benutzer wird eine Eigenschaft sein, die wir
in dem signierten Cookie einrichten, da Sie ein
wenig später sehen werden, wie wir das signierte Cookie einrichten.
Also, wenn die eingehende Anfrage nicht das Benutzerfeld in den signierten Cookies enthält,
und dann bedeutet das, dass der Benutzer noch nicht autorisiert wurde.
In diesem Fall
erwarten wir also, dass der Benutzer sich authentifiziert.
Also, dann werden wir all diesen Teil hier tun.
Beachten Sie also, dass wir dies bereits
früher getan hatten, wo wir den Authentifizierungs-Header handhaben.
Also werden wir all diesen Teil nehmen,
den ganzen Weg bis zu diesem „sonst“ hier und dann das hier drin einbeziehen.
Im Wesentlichen, was wir hier spezifizieren, ist, dass
ich es einrücken lassen.
Wie Sie sehen, bin ich sehr besonders in Bezug auf meine Einrückung
, weil dadurch der Code leichter zu lesen ist.
Also in diesem, wenn,
so ist dies der Schlusspunkt des wenn dieses hier.
Also sagen wir, wenn das signierte Cookie nicht die Benutzereigenschaft enthält,
dann erwarten wir, dass der Benutzer autorisiert, indem er den Autorisierungs-Header einschließt.
Wir werden also nach dem Autorisierungs-Header suchen.
Wenn der Autorisierungs-Header nicht verfügbar ist,
werden wir den Benutzer einfach ablehnen und den Benutzer auffordern,
den Benutzernamen und das Passwort einzugeben, wie wir es in der vorherigen Übung getan haben.
Wenn der Autorisierungs-Header enthalten ist,
werden wir den Autorisierungs-Header genau wie zuvor verarbeiten,
und wenn der Benutzer ein autorisierter Benutzer ist,
erinnern Sie sich, dass wir den nächsten aufgerufen haben, damit der Benutzer weitergehen kann.
Nun, an dieser Stelle,
was wir tun werden, ist, dass wir sagen werden,
werden wir den Cookie an dieser Stelle einrichten.
Dies ist, wo wir das res Cookie hier verwenden.
Beachten Sie, dass das Cookie nicht existiert,
also sagen wir „res.cookie“.
Wie Sie sehen können, nimmt das res-Cookie selbst die erste Wert-Namenszeichenfolge,
Wert-Zeichenfolge und Optionen, Cookie-Optionen.
Setzen Sie den Cookie-Namen auf Wert mit den angegebenen Optionen und die Optionen sind hier enthalten,
einige Optionen für das Cookie hier.
Ich werde einfach ein paar der Optionen hier verwenden.
Also werden wir sagen, „res.cookie“ und dann werde ich das Cookie mit dem Namen Benutzer einrichten.
Beachten Sie nun, dass dies der Grund ist, warum
ich nach dem Req.signedCookies.User dort oben suche.
Also sagen wir „res.cookie ('user',)“ und
das Benutzerfeld werde ich es auf 'admin'
setzen und dann werde ich dies als signiertes Cookie einrichten.
Also werde ich sagen „signiert: wahr“.
Das bedeutet, dass mein Cookie-Parser dafür sorgt
, dass dieses Cookie signiert und eingerichtet wird.
Dies ist also die Option, die ich hier für das res Cookie eingerichtet habe.
Dies wird also
diesen bestimmten Namen in das signierte Cookie mit diesem bestimmten Wert einschließen.
Das ist der Grund, warum ich diesen Wert hier oben überprüfen kann.
Wenn dies also nicht existiert,
erwarte ich natürlich, dass sich der Benutzer mit der Basisauthentifizierung authentifiziert,
und wenn die grundlegende Authentifizierung erfolgreich ist,
werde ich das Cookie hier einrichten und das
Cookie-Feld in der ausgehenden Antwortnachricht hier einrichten und
dies wird die Client, um das Cookie auf der Clientseite einzurichten, und dann
werden alle nachfolgenden Anfragen dieses Cookie in der Client-Anfrage enthalten.
So handele ich damit, wenn der cookie.user nicht existiert.
Da. Wenn es existiert,
dann der else Teil,
so dass das signierte Cookie bereits
existiert und die Benutzereigenschaft darauf definiert ist,
dann
werde ich in der sonst überprüfen,
ob req.signedCookies.User admin ist.
Dann bedeutet das, dass das signierte Cookie die richtigen Informationen enthält.
Dann werde ich als Nächstes sagen.
Das bedeutet, dass Sie die Anfrage durchlaufen lassen.
Andernfalls ist dieses Cookie nicht gültig, da es diesen korrekten Wert nicht enthält.
Das bedeutet also, dass dies ein Fehler ist.
In diesem Fall
werden wir sagen, dass Sie nicht authentifiziert sind,
und dann werden wir einfach den Fehler in diesem Punkt verursachen.
Jetzt werden wir den Benutzer nicht zur
Sitzung auffordern, da dies früher getan worden sein muss.
Normalerweise würde dies nicht passieren,
denn wenn das Cookie bereits auf der Clientseite gesetzt ist,
muss es trotzdem den richtigen Wert enthalten.
Aber der Vollständigkeit halber
habe ich auch die else Fehlerprüfung hier an dieser Stelle aufgenommen. Das war's.
Mit diesem Setup haben wir
unsere Express-Anwendung in eine verwandelt, die Cookies hier verarbeitet.
Nochmals, lassen Sie mich Ihre Aufmerksamkeit noch einmal auf das lenken, was wir hier tun.
Hier überprüfen wir, ob
die Benutzereigenschaft in den signierten Cookies nicht existiert
oder sogar das signierte Cookie selbst nicht existiert.
Dann werden wir erwarten, dass eine grundlegende Autorisierung durchgeführt wird.
Wenn die Autorisierung erfolgreich ist
, werde ich das Cookie einrichten, indem ich hier das res.cookie verwende.
Dann werden alle nachfolgenden Anfragen das signierte Cookie trotzdem tragen,
und dann werde ich überprüfen, ob das signierte Cookie
ein gültiges signiertes Cookie ist und die Benutzereigenschaft enthält, die auf admin gesetzt ist.
Wenn dies der Fall ist, dann ist dies ein autorisierter Zugriff,
so dass es erlaubt, weiterzufahren.
Wenn nicht, dann löse ich an dieser Stelle einen Fehler aus.
Geringfügige Korrektur, erwarten die neuen Versionen von Node.js, dass Sie dies als
neuen Puffer.From anstelle von neuen Puffer verwenden, um einige Sicherheitsprobleme zu beheben.
Korrigieren Sie diese Zeile einfach zu neuen Puffer.From. Das war's.
Lassen Sie uns die Änderungen speichern und dann gehen und schauen Sie sich unsere Anwendung in diesem Postman an.
Wenn der vorherige Server läuft,
stoppen Sie ihn einfach, indem Sie Control C eingeben,
und starten Sie den Server neu, indem Sie npm start sagen. Stellen Sie
natürlich sicher, dass Ihr MongoDB-Server einsatzbereit ist.
Andernfalls wird Ihr Express-Server nicht korrekt gestartet.
Sobald Ihr Express-Server gestartet ist,
dann gehen wir zu unserem Postboten und versuchen, eine Verbindung mit dem Server herzustellen.
Und ich werde ein paar Aspekte darüber zeigen, wie Cookies gehandhabt werden.
Gehen Sie zum Postman,
lassen Sie mich all diese Informationen
von meinem Postboten löschen und dann beginnen wir mit den Grundlagen.
Also lassen Sie mich versuchen, auf den localhost zuzugreifen: 3000/Gerichte.
Jetzt, nachdem ich alles gelöscht
habe, werde ich die Anfrage senden und speichern.
Von der Serverseite
heißt es, dass Sie nicht authentifiziert sind.
Wenn Sie sich dann die Kopfzeile ansehen,
fordert mich dies auf, mich mit der WWW-Authenticate zu authentifizieren.
Also, lassen Sie mich jetzt in die Autorisierung gehen und dann die grundlegende Autorisierung einrichten,
und dann werde ich die Autorisierung als admin
und dann Passwort einrichten und dann die Anfrage aktualisieren, so dass der Header
jetzt den Autorisierungs-Header hier mit den Informationen enthält.
Und dann lassen Sie mich die Git-Anfrage zu diesem Teil senden.
Wenn ich die Git-Anfrage sende,
sehen Sie als Antwort, dass die Git-Anfrage erfolgreich war.
Beachten Sie auch ein paar weitere Dinge.
Sie sehen, dass der Status 200 OK ist.
Beachten Sie auch, dass ein Cookie auf unserer Kundenseite in Postman hier eingerichtet wurde.
Dieses Cookie enthält Informationen.
Wir werden uns die Details des Cookies in einer Minute ansehen.
Wenn Sie sich dann die Kopfzeile ansehen,
sehen Sie in der Kopfzeile diesen Wert hier, der Set-Cookie sagt,
und dann diese Informationen, die hier hereinkommen.
Nun, wenn Sie es genau betrachten,
sehen Sie hier etwas sagt Benutzer gleich,
und dann sehen Sie diesen Wert hier, admin dort.
Sie bemerken also, dass etwas in dem Cookie eingeschlossen wurde.
Wenn Sie den Cookie tatsächlich untersuchen möchten,
gehen Sie hier in Postman hoch und klicken Sie dann auf diese Schlüssel,
und dann zeigt dies Ihnen alle Cookies, die auf dieser Client-Seite eingerichtet wurden.
Vor allem dann lassen Sie mich jetzt all diese anderen Kekse löschen.
Ich habe wahrscheinlich einige davon aus irgendeinem anderen Grund verwendet.
Also lass mich einfach die Kekse putzen.
Wie auch immer, wenn du sie
siehst, kannst du sie einfach da lassen.
Kein großes Problem.
Konzentrieren Sie sich hier speziell auf den lokalen Host,
und dann sehen Sie dieses Cookie hier.
Klicken Sie einfach auf den Cookie,
und dann sehen Sie den tatsächlichen Wert innerhalb des Cookies, der dort gespeichert wird.
Dann auch das Ablaufdatum für das Cookie-Setup hier.
Nun, dieser Wert wird genau das sein, was Sie in
dem gesetzten Cookie gesehen haben, das von der Serverseite hereinkam.
Nun bedeutet dies auch, dass in nachfolgenden Anfragen, die in gehen,
also selbst wenn ich meine Autorisierung löschen,
und selbst wenn ich den Autorisierungs-Header entfernen,
weil das Cookie eingerichtet wurde,
wurde dieses Cookie auf meinem lokalen Host eingerichtet,
jede nachfolgende Anfrage geht an diesen Server wird dieses Cookie enthalten.
Obwohl ich die Header dort nicht einrichten würde,
wenn ich die Anfrage sende,
werden Sie feststellen, dass die Git-Anfrage wie zuvor ohne Probleme funktioniert,
da jede ausgehende Anfrage
diesen Cookie automatisch in die ausgehende Anfrage meines Postmanns einschließt hier.
Dies demonstriert die Verwendung von Cookies in unserer Anwendung.
Damit haben wir gesehen, wie Cookies auf
unserem Express-Server mit dem Cookie-Parser eingerichtet und verarbeitet werden können
und wie wir signierte Cookies einrichten können.
Dies ist ein guter Zeitpunkt für Sie, ein Git-Commit mit den Nachrichten-Cookies zu machen.