Dieses Tutorial von Passport.js te guiará a través de los pasos para configurar una Strategie de autenticación Node.js lokale Verwendung Redis. Sie lernen, eine Authentifizierungsschnittstelle mit zu erstellen Passport.js, donde los usuarios proporcionarán sus nombres de Nutzername y contraseñas. A pesar de su complejidad, los mecanismos de autenticación se pueden implementar fácilmente en Node.js.
Zu verwendende Technologien
Bevor wir kopfüber in unser Passport.js-Authentifizierungs-Tutorial springen, werfen wir einen Blick auf die Technologien, die wir in diesem Kapitel verwenden werden.
Was ist Passport.js?
- Passport.js ist eine Authentifizierungs-Middleware Node.js einfach und diskret für Node.js
- Passport.js se puede colocar en cualquier aplicación Netz beyogen auf Express.js.
- Reisepass ist ein Middleware Authentifizierung für Node.js die wir für das Sitzungsmanagement verwenden werden.
Was ist Redis?
Redis es un almacén de estructura de datos en memoria de Open Source (con licencia BSD), utilizado como base de datos, Zwischenspeicher y intermediario de mensajes.
Redis unterstützt verschiedene Arten von abstrakten Datenstrukturen wie Zeichenfolgen, Hashes, Listen, Mengen, geordnete Mengen mit Bereichsabfragen, Bitmaps, Hyperlinks und Geodatenindizes mit Funkabfragen.
Wir speichern die Informationen der Sitzung unseres Benutzers in Redis, und nicht im Gedächtnis des Prozesses. Auf diese Weise lässt sich unsere Anwendung viel einfacher skalieren.
Die Demoanwendung, die authentifiziert werden muss
Erstellen wir zu Demonstrationszwecken eine Anwendung, die genau die folgenden Funktionen ausführt:
- ein Anmeldeformular offenlegen,
- Legen Sie zwei geschützte Seiten frei:
- eine Profilseite,
- gesicherte Notizen
Die Struktur des Projekts
Wir werden die folgende Struktur verwenden:
├── App | ├── Authentifizierung | ├── Hinweis | ├── Benutzer | ├── index.js | └── layout.hbs ├── config | └── index.js ├── index.js └── package.json
Wie Sie sehen können, organisieren wir die Dateien und Verzeichnisse nach den Merkmalen. Wir werden eine Benutzerseite, eine Notizenseite und einige Funktionen im Zusammenhang mit der Authentifizierung haben.
Der Authentifizierungsablauf von Node.js.
Unser Ziel es implementar el siguiente flujo de autenticación en nuestra aplicación utilizando Passport.js:
- Der Benutzer gibt den Benutzernamen und das Passwort ein
- Die Anwendung prüft, ob sie übereinstimmen.
- Wenn sie übereinstimmen, senden Sie eine Kopfzeile Set-Cookie zur Authentifizierung anderer Seiten.
- Cuando el usuario visita páginas del mismo Domain, das Plätzchen configurada previamente se agregará a todas las solicitudes
- Authentifizieren Sie eingeschränkte Seiten mit diesem Cookie.
Führen Sie die folgenden drei Schritte aus, um eine solche Authentifizierungsstrategie in einer Node.js-Anwendung mit Passport.js zu konfigurieren:
Schritt 1: Express-Konfiguration
Vamos a utilizar Express para el marco del Server.
// Datei: app / index.js const express = erfordern ('express') const passport = erfordern ('passport') const session = erfordern ('express-session') const RedisStore = erfordern ('connect-redis') ( session) const app = express () app.use (session ({store: new RedisStore ({url: config.redisStore.url}), secret: config.redisStore.secret, resave: false, saveUninitialized: false})) app .use (passport.initialize ()) app.use (passport.session ())
Was haben wir hier gemacht?
Zunächst benötigen wir alle Abhängigkeiten, die das Sitzungsmanagement benötigt. Danach haben wir eine neue Instanz des Moduls erstellt Express-Sitzung, das wird unsere Sitzungen speichern.
Für den Backup-Speicher verwenden wir Redis, aber du kannst jeden anderen benutzen, wie MySQL oder MongoDB.
Schritt 2: Einrichten von Passport.js für Node.js.
Passport.js ist ein großartiges Beispiel für eine Bibliothek, die Plugins verwendet. In diesem Tutorial von passport.js, Wir fügen das Modul hinzu Reisepass-lokal Dies ermöglicht die einfache Integration einer einfachen lokalen Authentifizierungsstrategie unter Verwendung von Benutzernamen und Kennwörtern.
Der Einfachheit halber verwenden wir in diesem Beispiel keinen zweiten Sicherungsspeicher, sondern nur eine speicherinterne Benutzerinstanz. In realen Anwendungen, Benutzer finden Es würde einen Benutzer in einer Datenbank nachschlagen.
// Datei: app / authenticate / init.js const passport = erfordern ('passport') const bcrypt = erfordern ('bcrypt') const LocalStrategy = erfordern ('passport-local'). Strategie const user = {Benutzername: 'test -user ', passwordHash:' bcrypt-hashed-password ', id: 1} passport.use (neue LocalStrategy ((Benutzername, Passwort, erledigt) => {findUser (Benutzername, (err, Benutzer) => {if (err )) {return done (err)} // Benutzer nicht gefunden if (! user) {return done (null, false)} // Verwenden Sie immer Hash-Passwörter und Vergleiche mit fester Zeit bcrypt.compare (password, user.passwordHash, ( err, isValid) => {if (err) {return done (err)} if (! isValid) {return done (null, false)} return done (null, user)})})})
Sobald die Rückkehr von Benutzer finden Mit unserem Benutzerobjekt müssen Sie nur noch das Hash-Passwort des Benutzers und das tatsächliche Passwort vergleichen, um festzustellen, ob eine Übereinstimmung vorliegt. Speichern Sie immer gehashte Passwörter und verwenden Sie einen festen Zeitvergleich, um Zeitangriffe zu vermeiden.
Wenn es sich um eine Übereinstimmung handelt, können die Benutzer Folgendes eingeben: Rückgabe erfolgt (null, Benutzer) (Rückgabe des Passes an den Benutzer), wenn nicht, geben wir einen nicht autorisierten Fehler zurück (Rückgabe nichts an den Passport- return done (null)).
Schritt 3: Fügen Sie geschützte Endpunkte hinzu
Um geschützte Endpunkte hinzuzufügen, nutzen wir das Muster von Middleware was benutzt du Ausdrücken. Dafür werden wir das schaffen Middleware Authentifizierung zuerst:
// Datei: app / authentication / middleware.js Funktion authenticationMiddleware () {Rückgabefunktion (req, res, next) {if (req.isAuthenticated ()) {return next ()} res.redirect ('/')}}
Es hat nur eine Rolle, wenn der Benutzer authentifiziert ist (die richtigen Cookies hat); ruf einfach den nächsten an Middleware. Andernfalls wird zu der Seite weitergeleitet, auf der sich der Benutzer anmelden kann.
Die Verwendung ist so einfach wie das Hinzufügen einer neuen Middleware zur Routendefinition.
// Datei: app / user / init.js const passport = require ('passport') app.get ('/ profile', passport.authenticationMiddleware (), renderProfile)
Zusammenfassung - Authentifizierung mit Passport.js
In diesem Tutorial zu Passport.js haben Sie gelernt, wie Sie Ihrer Node.js-Anwendung eine grundlegende Authentifizierung hinzufügen. Später können Sie es mit verschiedenen Authentifizierungsstrategien erweitern, z Facebook oder Twitter. Weitere Strategien finden Sie unter http://passportjs.org/.