J'utilise passeportJS et je souhaite fournir plus que juste req.body.username
et req.body.password
à ma stratégie d'authentification (passeport local).
J'ai 3 champs de formulaire: username
, password
, &foo
Comment puis-je accéder à req.body.foo
partir de ma stratégie locale qui ressemble à:
passport.use(new LocalStrategy(
{usernameField: 'email'},
function(email, password, done) {
User.findOne({ email: email }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Unknown user' });
}
if (password != 1212) {
return done(null, false, { message: 'Invalid password' });
}
console.log('I just wanna see foo! ' + req.body.foo); // this fails!
return done(null, user, aToken);
});
}
));
J'appelle ceci dans ma route (pas comme middleware de route) comme ceci:
app.post('/api/auth', function(req, res, next) {
passport.authenticate('local', {session:false}, function(err, user, token_record) {
if (err) { return next(err) }
res.json({access_token:token_record.access_token});
})(req, res, next);
});
passReqToCallback
dans le guide? Je ne l'ai pas vu.usernameField
selon une condition? J'ai deux options: l'une est le courrier électronique et l'autre est le numéro de téléphone. et la table de connexion contient ces deux champs avec le mot de passe.Dans la plupart des cas, nous devons fournir 2 options de connexion
C'est simple, nous pouvons prendre un nom d'utilisateur et une requête communs déposés ou par deux options, j'ai posté les extraits suivants, si quelqu'un a la même question.
Nous pouvons également utiliser 'passReqToCallback' est également la meilleure option, merci @Jared Hanson
la source