用Mongoose宣传护照策略

时间:2016-11-09 07:22:03

标签: javascript mongoose promise ecmascript-6 passport.js

我试图清理我的身份验证以使用Promise而不是使用多个嵌套回调。当我的函数涉及简单的Mongoose查询时,我设法做到这一点,但一直试图将Promise应用于Passport.js Strategy

如果我将localLogin函数转换为基于Promise的函数,并且我的ESLinter对多个return done(...)调用不太满意,那么会非常有用吗。

以下是代码:

UserSchema.methods.comparePassword = function (clientPassword, callback) {
  bcrypt.compare(clientPassword, this.password, (err, isMatch) => {
    if (err) return callback(err);

    return callback(null, isMatch);
  });
};

const localLogin = new LocalStrategy(localOptions, (username, password, done) => {
  User.findOne({ username }, (err, user) => {
    if (err) return done(err);
    if (!user) return done(null, false);

    user.comparePassword(password, (err, isMatch) => {
      if (err) return done(err);
      if (!isMatch) return done(null, false);

      return done(null, user);
    });
  });
});

passport.use(localLogin);

然后将其用作中间件,如下所示:

const requireLogin = passport.authenticate('local', { session: false });

router.route('/login')
  .post(requireLogin, authController.login);

0 个答案:

没有答案