在注册时,我检查数据库以查看用户名和电子邮件是否存在,如果存在,它应该返回错误。所有用户名和电子邮件都应该是唯一的。看来我的问题是我只能得到一个错误。如果电子邮件已经存在,我会收到 Flash 消息,但如果用户名也存在,则不会说明用户名已经存在。我想显示这两个错误如果两个错误都已经存在于帖子中
我假设问题是返回done()
电子邮件。因为我有 2 个查询它只查看第一个被击中的查询。我真的不知道。
我试图对此进行研究,我知道您可以为 req.flash 传入一个数组,但我只是可以让它工作,因为它返回了它看到的第一个我认为存在的数组。
我还读到 for 的第三个参数done
是一个 info 对象,我认为它提供了有关用户的信息,我正在考虑在那里加载现有信息,但我无法将它们放在一起。我也尝试了其他东西。但是我只会向您展示与查询数据库有关的东西,因为我失败了
passport.use("local-signup", new LocalStrategy({
usernameField : "email",
passwordField : "password",
passReqToCallback : true
},
function(req, email, password, done){
var arr = [];
User.findOne({"email" : email}, function(err, user){
if(err) return done(err);
if(user){
// arr.push("That email is already taken")
return done(null, false, req.flash("signupMessage", "That username is taken"))
}else{
User.findOne({"username" : req.body.username}, function(err,user){
if(err) return done(err);
if(user){
// arr.push()
return done(null, false, req.flash("signupMessage", "That username is taken"))
}else{
var newUser = new User();
newUser.username = req.body.username;
newUser.password = password;
newUser.email = req.body.email;
newUser.save(function(err, doc){
if(err) throw err;
console.log("doc", " " , doc)
return done(null, newUser);
})
}
})
}
})
}
))
EJS
app.get("/signup", function(req, res){
console.log(req.session)
console.log(req.flash("signupMessage"))
res.render("signup", {authed : authed, user : user, message: req.flash("signupMessage")})
})
app.post("/signup",passport.authenticate("local-signup", {
successRedirect : "/",
failureRedirect : "/signup",
failureFlash : true
}))