使用mongoose中的promises进行护照身份验证

时间:2016-08-26 00:56:52

标签: node.js mongoose promise passport.js

var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');

module.exports = function(passport){
  passport.use('local-signup', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
  },
  function(req, email, password, done){

    User.findOne({'local.username': email}).exec()
      .then(function(user) {
        console.log(user);
        if(user){
          return done(null, false, {message: 'Username already taken!'});
        }
        else{
          var newUser = new User();

          newUser.local.username = email;
          newUser.local.password = password;

          return newUser.save();
        }
      })
      .then(function(user) {
        console.log('DEBUG DEBUG DEBUG');
        done(null, user);
      })
      .catch(function(err) {
        done(err);
      });
  }
  ));

  passport.serializeUser(function(user, done) {
    done(null, user.id);
  });

  passport.deserializeUser(function(userid, done) {
      User.findById(userid).exec()
        .then(function(user) {
          done(user);
        });
  });
};

在我的情况下,始终打印调试日志,无论是否调用返回newUser.save()。 调用返回newUser.save()时是否可以打印调试日志?

顺便说一句,我使用passportJS进行身份验证,并承诺我会用全局es6承诺覆盖mongoose默认承诺。

2 个答案:

答案 0 :(得分:1)

你是说这个意思吗?对不起,如果有额外的括号或括号。我在文本框中编辑。 :(

   User.findOne({'local.username': email}).exec()
      .then(function(user) {

        if(user){
          return done(null, false, {message: 'Username already taken!'});
        }
        else{
          var newUser = new User();

          newUser.local.username = email;
          newUser.local.password = password;

          return newUser.save()
              .then(function(){
                  console.log('DEBUG DEBUG DEBUG');              
                  done(null, user);      
              })
        }
      })
      .catch(function(err) {
        done(err);
      });
  }
  ));

答案 1 :(得分:1)

只需将调试信息放在newUser.save()

中的函数中即可
User.findOne({'local.username': email}).exec()
  .then(function(user) {
    console.log(user);
    if(user){
      return done(null, false, {message: 'Username already taken!'});
    }
    else{
      var newUser = new User();

      newUser.local.username = email;
      newUser.local.password = password;

      return newUser.save(function() {
        console.log('SAVED!');
        console.log('DEBUG DEBUG DEBUG');
      });
    }
  })
  .then(function(user) {
    done(null, user);
  })