Je l'ai compris!
Tout d'abord, vous devez mettre en œuvre la bonne stratégie. Dans mon cas, LocalStrategy, et vous devez fournir votre logique de validation. Par exemple, utilisons celui de passeport local.
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
le rappel de vérification que vous fournissez function(username, password, done)
se chargera de trouver votre utilisateur et de vérifier si le mot de passe correspond (au-delà de la portée de la question et de ma réponse)
passeport.js attend plusieurs éléments pour que cela fonctionne, l'un est que vous renvoyez l'utilisateur dans la stratégie. J'essayais de changer cette partie du code, et c'était faux. Le rappel attend false
si la validation échoue et un object
(l'utilisateur validé) si vous réussissez.
Maintenant .... comment intégrer JWT?
Dans votre itinéraire de connexion, vous devrez gérer une authentification réussie ou infructueuse. Et c'est ici que vous devez ajouter la création de jeton JWT. Ainsi:
(n'oubliez pas de désactiver la session, sinon vous devrez implémenter les fonctions de sérialisation et de désérialisation. Et vous n'en avez pas besoin si vous ne persistez pas la session, ce que vous n'êtes pas si vous utilisez une authentification basée sur un jeton)
À partir d'exemples locaux de passeport: (avec le jeton JWT ajouté)
// POST /login
// This is an alternative implementation that uses a custom callback to
// achieve the same functionality.
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err) }
if (!user) {
return res.json(401, { error: 'message' });
}
//user has authenticated correctly thus we create a JWT token
var token = jwt.encode({ username: 'somedata'}, tokenSecret);
res.json({ token : token });
})(req, res, next);
});
Et c'est tout! Maintenant, lorsque vous appelez / connectez-vous et POST le nom d'utilisateur et le mot de passe (qui doivent toujours être sur SSL), le premier extrait de code ci-dessus essaiera de trouver un utilisateur en fonction du nom d'utilisateur que vous avez fourni, puis vérifiera que le mot de passe correspond (bien sûr, vous devrez changez-le en fonction de vos besoins).
Après cela, votre itinéraire de connexion sera appelé et vous pourrez y retourner une erreur ou un jeton valide.
J'espère que cela aidera quelqu'un. Et si j'ai commis des erreurs ou oublié quelque chose, faites-le moi savoir.