
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 JWT
et Crypto
générer hash
et à salt
partir de la password
chaî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 validatePassword
que 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 getTokenFromHeaders
pour 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 auth
objet avec optional
et required
proprié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
Check out my app SwipeFeed.