Using PassportJS, how does one pass additional form fields to the local authentication strategy?
authentication, callback, express, node.js, passport.js
Solution
There's a `passReqToCallback` option that you can enable, like so:
passport.use(new LocalStrategy(
{usernameField: 'email', passReqToCallback: true},
function(req, email, password, done) {
// now you can check req.body.foo
}
));
When, set `req` becomes the first argument to the verify callback, and you can inspect it as you wish.
Problem
I'm using passportJS and I'm wanting to supply more than just `req.body.username` and `req.body.password` to my authentication strategy (passport-local). I have 3 form fields: `username`, `password`, & `foo` How do I go about accessing `req.body.foo` from my local strategy which looks like: ``` 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); }); } )); ``` I'm calling this inside my route (not as route middleware) like so: ``` 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); }); ```