Mongoose.save中的Passport-Local问题

时间:2017-08-30 10:45:04

标签: javascript rest mongoose passport-local

我正在使用以下代码;

router.post('/register', function(req, res) {
      User.register(new User({ username : req.body.username }),
          req.body.password, function(err, user) {
          if (err) {
              return res.status(500).json({err: err});

        }
      if(req.body.firstname) {
        user.firstname = req.body.firstname;
      }

      if(req.body.lastname) {
        user.lastname = req.body.lastname;
      }

      user.save( function(err, user) {
        passport.authenticate('local')(req, res, function () {
          return res.status(200).json({status: 'Registration Successful!'}); 
        });
      });
  });
});

它产生以下内容;

{
        "_id" : ObjectId("59a631ff29e0a506c81032b3"),
        "salt" : null,
        "hash" : null,
        "username" : "admin",
        "admin" : false,
        "lastname" : "Last",
        "firstname" : "Test",
        "__v" : 0
}

salt和hash是从passport.authenticate(' local')生成的。如果我排除user.save(function(err,user){...});在passport.authenticate周围的代码,它不更新姓氏或名字部分但盐和哈希DO得到更新。

我在这个论坛上搜索过类似的问题;审核了Passport(http://passportjs.org/docs)和Passport-local github(https://github.com/jaredhanson/passport-local)以获取可能的解决方案,但未找到类似的问题或解决方案。

任何建议都很棒。

1 个答案:

答案 0 :(得分:0)

经过大量研究后,这是一个解决我遇到的问题的代码示例。使用它可以正确更新名字,姓氏,盐和哈希。

我仍然不确定为什么原始代码在user.save中调用passport.authenticate时会抛出401 / Unauthorized错误。

 router.post('/register', function(req, res) {
    User.register(new User({
                            username : req.body.username,
                            firstname : req.body.firstname,
                            lastname : req.body.lastname,
                          }),
        req.body.password, function(err, user) {
        if (err) {
            return res.status(500).json({err: err});
        }
        passport.authenticate('local')(req, res, function () {
          return res.status(200).json({status: 'Registration Successful!'});
        });
    });
});