Implement PassportJS (local-strategy) custom callback using async/await

1.5k Views Asked by At

I've implemented passport local strategy using async/await as below

const strategy = new LocalStrategy(
  async(username, password, done) => {
    try {
      // Find the user given the username
      const user = await User.findOne({ username });

      // If not, send info
      if (!user) {
        return done(null, false, {
          success: false,
          message: 'User not found'
        })
      }

      // Check if the password is correct
      const isMatch = await user.isValidPassword(password);

      // If not, send info
      if (!isMatch) {
        return done(null, false, {
          success: false,
          message: 'Invalid Password'
        });
      }

      // Otherwise, return the user
      done(null, user);

    } catch (error) {
      done(error, false);
    }
  }
);

passport.use(strategy);

And implemented custom callback in routes using the code below.

router.post('/login', async(req, res, next) => {
    const { receivedUser, information } = await passport.authenticate('local');

    // If a user is found
    if (receivedUser) {
        res.status(200).json({
            success: true,
            message: 'Authentication Successful'
        });
    } else {
        // If user is not found
        res.status(401).json(information);
    }
  };
);

There are errors in above custom callback implementation as receivedUser and information are 'undefined'. How to make changes to above custom callback using async/await to remove errors ?

Referred docs:
http://passportjs.org/docs/configure
http://passportjs.org/docs/username-password

0

There are 0 best solutions below