Je suis un noeud node.js et express.js. Cette question peut sembler idiote, mais je suis vraiment dans la confusion.
J'essaie de configurer l'authentification Stratégies locales en utilisant passeport . Comme indiqué dans la documentation officielle, nous pouvons représenter cette stratégie locale par le code suivant,
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); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
Ma confusion concerne la fonction de rappel done
. Lorsque les documents officiels montrent cette stratégie locale en tant que middleware dans le gestionnaire d'itinéraire, il n'est pas nécessaire de passer le paramètre de fonction pour ce rappel done
.
app.post('/login',
passport.authenticate('local'),
function(req, res) {
res.redirect('/');
});
Donc, cette fonction de rappel done
sera nulle si nous ne fournissons pas le paramètre de fonction? Sinon, quelle est cette fonction de rappel done
et quels processus se produiront dans cette fonction de rappel done
?
done
est une méthode appelée en interne par l'implémentation de la stratégie .
Ensuite, il vous dirige, comme vous pouvez le voir, vers l'une des méthodes success
/error
/fail
(là encore, par l'implémentation. il y a plus d'options ). Chacune de ces options peut appelle vers next
, où dans votre code d'extrait de code est le suivant:
function(req, res) {
res.redirect('/');
});
Lorsque success
est appelé, il peut attacher l'utilisateur à la demande ou faire d'autres choses, selon vos besoins (il recherche le options
que vous passez à passport.authenticate
). Si vous voulez déterminer quand next
sera appelé, vous devez utiliser custom callback
qui vous donne plus de flexibilité.
Je vous recommande fortement de lire la source.