Using PassportJS, how does one pass additional form fields to the local authentication strategy? Using PassportJS, how does one pass additional form fields to the local authentication strategy? express express

Using PassportJS, how does one pass additional form fields to the local authentication strategy?


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.


In most common cases we need to provide 2 options for login

  • with email
  • with mobile

Its simple , we can take common filed username and query $or by two options , i posted following snippets,if some one have have same question .

We can also use 'passReqToCallback' is best option too , thanks @Jared Hanson

passport.use(new LocalStrategy({    usernameField: 'username', passReqToCallback: true}, async (req, username, password, done) => {    try {        //find user with email or mobile        const user = await Users.findOne({ $or: [{ email: username }, { mobile: username }] });        //if not handle it        if (!user) {            return done(null, {                status: false,                message: "That e-mail address or mobile doesn't have an associated user account. Are you sure you've registered?"            });        }        //match password        const isMatch = await user.isValidPassword(password);        debugger        if (!isMatch) {            return done(null, {                status: false,                message: "Invalid username and password."            })        }        //otherwise return user        done(null, {            status: true,            data: user        });    } catch (error) {        done(error, {            status: false,            message: error        });    }}));