Node.js Passport-注册用户&;传递信息

Node.js Passport-注册用户&;传递信息,node.js,mongodb,express,npm,passport.js,Node.js,Mongodb,Express,Npm,Passport.js,我正在使用Node/Express/Passport向我的站点注册新用户。很简单。我用猫鼬来保存数据 目标:我试图让一个人(未登录)回答几个问题。(答案存储在VAR中)然后,在他们完成后,我希望他们注册一个新帐户 当他们注册时,我想将他们的用户名和密码以及他们答案中的数据传递到数据库。因此,我们的目标是在一次点击中实现这一点。这是我尝试过的,到目前为止运气都不好。谢谢你的帮助 var Beliefs = mongoose.model("Beliefs", beliefsSchema); //ha

我正在使用Node/Express/Passport向我的站点注册新用户。很简单。我用猫鼬来保存数据

目标:我试图让一个人(未登录)回答几个问题。(答案存储在VAR中)然后,在他们完成后,我希望他们注册一个新帐户

当他们注册时,我想将他们的用户名和密码以及他们答案中的数据传递到数据库。因此,我们的目标是在一次点击中实现这一点。这是我尝试过的,到目前为止运气都不好。谢谢你的帮助

var Beliefs = mongoose.model("Beliefs", beliefsSchema);
//handle sign up logic
app.post("/quiz", function(req, res){
    var newUser = new User({username: req.body.username});
    User.register(newUser, req.body.password, function(err, user){
        if(err){
            req.flash("error", err.message);
            console.log(err)

        }
        passport.authenticate("local")(req, res, function(){
          req.flash("success", "Welcome to JobQuiz " + user.username);
          res.redirect("jobquiz"); 
        });
    });
});
    //Create Answers
    Beliefs.create(req.body.beliefs, function(err, newBeliefs){
    Beliefs.create(req.body.beliefs2, function(err, newBeliefs2){
        if(err){
            console.log(err)
        } else {
            newBeliefs.author.id = req.user._id;
            newBeliefs.author.username = req.user.username;
            newBeliefs.save();
            newBeliefs2.author.id = req.user._id;
            newBeliefs2.author.username = req.user.username;
            newBeliefs2.save();
            console.log("User is:" + req.user.username)
            console.log(req.body.beliefs)
            res.redirect("/elementsintro");

        }
    });


});
编辑:

这是我的问题。在此过程中,我将如何将信息保存给用户。我的问题是什么时候 我在下面添加代码:

newBeliefs.author.id=请求用户。\u id; newBeliefs.author.username=req.user.username


…我得到一个错误,没有用户。如何解决这个问题

您可以创建新的LocalStrategy,如果该用户不存在或用户名和密码与现有用户匹配,则该策略将注册该用户

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

passport.use('local-login-register', new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { 
        return done(err); 
      }
      if (!user) {
        var newUser = new User({username: username});
        User.register(newUser, password, function(err, user){
            if(err){
                return done(err);
            }
            return done(null, user);
        });
      } else if (!user.validPassword(password)) {
        return done(null, false, { message: 'Username already exists. Incorrect password.' });
      } else {
        return done(null, user);
      }
    });
  }
));
然后注册新端点:

app.post('/quiz', function(req, res, next) {
    passport.authenticate('local-login-register', function(err, user, info) {
        var quiz = req.body.quiz;

        if (err) { return next(err); }
        if (!user) { 
          // user needs to reanswer quiz or save user answers in session
          // and redirect user to new page with registraion form
        }

        // save here your quiz answers
    })(req, res, next);
});

嘿,谢谢!我不能完全让它工作。查看我的问题的编辑。如果我从代码中删除“newBeliefs.author.id=req.user.\u id”等,那么一切都会正常工作。我如何在注册的同时将信息保存给用户?您需要将此代码放入Passport success函数中。问题是如果我这样做,它会说它无法读取未知用户名的属性。