Apprenez à gérer l'authentification avec Node à l'aide de Passport.js

Soutenez-moi en le lisant à partir de sa source originale: SOURCE ORIGINALE

Dans cet article, vous apprendrez à gérer l' authentification pour votre serveur Node à l'aide de Passport.js. Cet article ne couvre pas l'authentification Frontend. Utilisez-le pour configurer votre authentification Backend (générer un jeton pour chaque utilisateur et protéger les routes).

Gardez à l'esprit que si vous êtes bloqué sur une étape, vous pouvez vous référer à ce dépôt GitHub .

Dans cet article, je vais vous apprendre ce qui suit:

  • Gestion des itinéraires protégés
  • Gestion des jetons JWT
  • Traitement des réponses non autorisées
  • Créer une API de base
  • Création de modèles et de schémas

introduction

Qu'est-ce que Passport.js?

Passport est un middleware d'authentification pour Node.js. Comme il est extrêmement flexible et modulaire, Passport peut être déposé discrètement dans n'importe quelle application Web basée sur Express. Un ensemble complet de stratégies prend en charge l'authentification à l'aide d'un nom d'utilisateur et d'un mot de passe, Facebook, Twitter, etc. En savoir plus sur Passport ici.

Didacticiel

Créer notre serveur de nœuds à partir de zéro

Créez un nouveau répertoire avec ce "app.js"fichier à l'intérieur:

Nous installerons nodemon pour un développement plus facile.

puis nous exécuterons notre «app.js» avec.

$ nodemon app.js

Création du modèle utilisateur

Créez un nouveau dossier appelé «modèles»,et créez le fichier «Users.js» dans ce dossier.C'est là que nous définirons notre «UsersSchema». Nous allons utiliser JWTet Cryptogénérer hashet à saltpartir de la passwordchaîne reçue . Celui-ci sera utilisé ultérieurement pour valider l'utilisateur.

Ajoutons notre modèle nouvellement créé à «app.js».

Ajoutez la ligne suivante à votre fichier «app.js» après la configuration Mongoose:

require('./models/Users');

Configurer le passeport

Créez un nouveau dossier «config» avec le fichier «passport.js» à l'intérieur:

Dans ce fichier, nous utilisons la méthode validatePasswordque nous avons définie dans leUser model. Sur la base du résultat, nous renvoyons une sortie différente de celle de Passport LocalStrategy.

Connectons «passeport.js» à notre fichier «app.js». Ajoutez la ligne suivante sous toutmodels :

require('./config/passport');

Itinéraires et options d'authentification

Créez un nouveau dossier appelé «routes» avec le fichier «auth.js» à l'intérieur.

Dans ce fichier, nous utilisons la fonction getTokenFromHeaderspour obtenir un jeton JWT qui sera envoyé du côté client dans les en -têtes de la requête . Nous créons également un authobjet avec optionalet requiredpropriétés. Nous les utiliserons plus tard dans nos itinéraires.

Dans le même dossier «routes», créez un fichier «index.js»:

Nous avons maintenant besoin d'un dossier «api» dans le dossier «routes», avec un autre fichier «index.js» à l'intérieur.

Maintenant, créons le fichier «users.js» dont nous avons besoin dans «api / index.js».

Tout d'abord, nous allons créer une route d' authentification optionnelle‘/’ qui sera utilisée pour la création d'un nouveau modèle (registre).

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

Après cela, nous allons créer une autre route d' authentification facultative‘/login’ . Cela sera utilisé pour activer notre configuration de passeport et valider un mot de passe reçu par e-mail.

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

Enfin, nous créerons une route d' authentification requise , qui sera utilisée pour renvoyer l'utilisateur actuellement connecté. Seuls les utilisateurs connectés (les utilisateurs dont le jeton a été envoyé avec succès via les en-têtes de la demande) ont accès à cette route.

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

Ajoutons notre dossier «routes» à «app.js».Ajoutez la ligne suivante sous notre passeportrequire :

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

Test d'itinéraire

J'utiliserai Postmanpour envoyer des demandes à notre serveur.

Notre serveur accepte le corps suivant:

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

Créer une requête POST pour créer un utilisateur

Corps de test:

Réponse:

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

Nous allons maintenant utiliser ce jeton et l'ajouter à nos «En-têtes» dans la configuration de Postman.

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.