Node.js Passport-注册用户&;传递信息
我正在使用Node/Express/Passport向我的站点注册新用户。很简单。我用猫鼬来保存数据 目标:我试图让一个人(未登录)回答几个问题。(答案存储在VAR中)然后,在他们完成后,我希望他们注册一个新帐户 当他们注册时,我想将他们的用户名和密码以及他们答案中的数据传递到数据库。因此,我们的目标是在一次点击中实现这一点。这是我尝试过的,到目前为止运气都不好。谢谢你的帮助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
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函数中。问题是如果我这样做,它会说它无法读取未知用户名的属性。