Erfahren Sie, wie Sie mit Passport.js mit der Authentifizierung mit Node umgehen

Unterstützen Sie mich, indem Sie es aus der Originalquelle lesen: ORIGINAL SOURCE

In diesem Artikel erfahren Sie, wie Sie die Authentifizierung für Ihren Knotenserver mithilfe von Passport.js durchführen. Dieser Artikel behandelt nicht die Frontend-Authentifizierung. Verwenden Sie diese Option, um Ihre Backend-Authentifizierung zu konfigurieren (Token für jeden Benutzer generieren und Routen schützen).

Denken Sie daran, dass Sie sich auf dieses GitHub-Repo beziehen können , wenn Sie bei einem Schritt stecken bleiben .

In diesem Artikel werde ich Ihnen Folgendes beibringen:

  • Umgang mit geschützten Routen
  • Umgang mit JWT-Token
  • Umgang mit nicht autorisierten Antworten
  • Erstellen einer Basis-API
  • Modelle und Schemata erstellen

Einführung

Was ist Passport.js?

Passport ist eine Authentifizierungs-Middleware für Node.js. Passport ist äußerst flexibel und modular aufgebaut und kann unauffällig in jede Express-basierte Webanwendung eingefügt werden. Eine umfassende Reihe von Strategien unterstützt die Authentifizierung mithilfe eines Benutzernamens und eines Kennworts, Facebook, Twitter und mehr. Erfahren Sie hier mehr über Passport.

Lernprogramm

Erstellen Sie unseren Knotenserver von Grund auf neu

Erstellen Sie ein neues Verzeichnis mit dieser "app.js"Datei im Inneren:

Wir werden nodemon installieren, um die Entwicklung zu vereinfachen.

und dann werden wir unsere "app.js" damit ausführen.

$ nodemon app.js

Benutzermodell erstellen

Erstellen Sie einen neuen Ordner mit dem Namen "Modelle".und erstellen Sie die Datei "Users.js" in diesem Ordner.Hier definieren wir unser „UsersSchema“. Wir werden verwenden JWTund Cryptogenerieren hashund saltaus dem empfangenen passwordString. Dies wird später verwendet, um den Benutzer zu validieren.

Fügen wir unser neu erstelltes Modell zu "app.js" hinzu.

Fügen Sie nach der Konfiguration die folgende Zeile zu Ihrer Datei "app.js" hinzu Mongoose:

require('./models/Users');

Pass konfigurieren

Erstellen Sie einen neuen Ordner "config" mit der darin enthaltenen Datei "passport.js":

In dieser Datei verwenden wir die Methode validatePassword, die wir in der definiert habenUser model. Basierend auf dem Ergebnis geben wir eine andere Ausgabe von Passport zurück LocalStrategy.

Verbinden wir "passport.js" mit unserer "app.js" -Datei. Fügen Sie die folgende Zeile unter allmodels :

require('./config/passport');

Routen und Authentifizierungsoptionen

Erstellen Sie einen neuen Ordner mit dem Namen "Routen" mit der darin enthaltenen Datei "auth.js".

In dieser Datei verwenden wir die Funktion getTokenFromHeaders, um ein JWT-Token abzurufen , das von der Clientseite in den Headern der Anforderung gesendet wird . Wir erstellen auch ein authObjekt mit optionalund requiredEigenschaften. Wir werden diese später auf unseren Routen verwenden.

Erstellen Sie im selben Ordner "Routen" eine Datei "index.js":

Wir brauchen jetzt einen "API" -Ordner im "Routen" -Ordner mit einer weiteren "index.js" -Datei darin.

Jetzt erstellen wir die Datei "users.js", die wir in "api / index.js" benötigen.

Zuerst werden wir zur Erstellung eines optionale Auth Route , ‘/’die für neue Modellerstellung (Register) verwendet wird.

router.post('/', auth.optional, (req, res, next) ...

Danach werden wir ein anderes schaffen optional Auth Route ‘/login’. Dies wird verwendet, um unsere Passkonfiguration zu aktivieren und ein erhaltenes Passwort per E-Mail zu bestätigen.

router.post('/login', auth.optional, (req, res, next) ...

Zuletzt erstellen wir eine erforderliche Authentifizierungsroute , die verwendet wird, um den aktuell angemeldeten Benutzer zurückzugeben. Nur angemeldete Benutzer (Benutzer, deren Token erfolgreich über die Header der Anforderung gesendet wurde) haben Zugriff auf diese Route.

router.get('/current', auth.required, (req, res, next) ...

Fügen wir unseren Ordner "Routen" zu "app.js" hinzu.Fügen Sie die folgende Zeile unter unserem Reisepass hinzurequire :

app.use(require('./routes'));

Routentest

Ich werde Postman benutzenum Anfragen an unseren Server zu senden.

Unser Server akzeptiert den folgenden Text:

{ "user": { "email": String, "password": String } }

Erstellen einer POST-Anforderung zum Erstellen eines Benutzers

Testkörper:

Antwort:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

Wir werden dieses Token nun verwenden und es in der Postman-Konfiguration zu unseren "Headern" hinzufügen.

And now let’s test our auth only route.

Creating a GET request to return the currently logged in user

Request URL:

GET //localhost:8000/api/users/current

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

Let’s try to do it without token in “Headers”.

Response:

The end

Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.

You can contact me through:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Check out my app SwipeFeed.