Ich verwende passportJS und ich bin zu wollen mehr als nur zu liefern req.body.username
und req.body.password
zu meiner Authentifizierungsstrategie (Pass-local).
Ich habe 3 - Formularfelder: username
, password
, &foo
Wie gehe ich vor, um req.body.foo
von meiner lokalen Strategie aus darauf zuzugreifen ?
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);
});
}
));
Ich nenne dies innerhalb meiner Route (nicht als Routen-Middleware) wie folgt:
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
in der Anleitung? Ich habe es nicht gesehen.usernameField
entsprechend einer Bedingung einzustellen ? Ich habe zwei Möglichkeiten: eine ist E-Mail und die andere ist Telefonnummer. und die Anmeldetabelle enthält diese beiden Felder zusammen mit dem Passwort.In den meisten Fällen müssen wir zwei Optionen für die Anmeldung bereitstellen
Es ist einfach, wir können einen gemeinsamen Benutzernamen verwenden und $ oder zwei Optionen abfragen. Ich habe folgende Snippets gepostet, wenn jemand die gleiche Frage hat.
Wir können auch 'passReqToCallback' verwenden, ist auch die beste Option, danke @Jared Hanson
quelle