Javascript 登录前验证电子邮件(Nodejs、Mongoose和mongodb、Passportjs)

Javascript 登录前验证电子邮件(Nodejs、Mongoose和mongodb、Passportjs),javascript,node.js,mongoose,passport.js,Javascript,Node.js,Mongoose,Passport.js,在登录到系统之前,我无法先验证我的电子邮件地址。这是到目前为止我的代码 这行代码是我验证我的电子邮件地址时,他点击他/她的电子邮件地址上的链接,它将重定向到我的登录表单 router.get('/verify_email', function(req, res){ console.log('verify_email token: ', req.query.token); User.findOne({authToken: req.query.token}, function(err, user)

在登录到系统之前,我无法先验证我的电子邮件地址。这是到目前为止我的代码

这行代码是我验证我的电子邮件地址时,他点击他/她的电子邮件地址上的链接,它将重定向到我的登录表单

router.get('/verify_email', function(req, res){
console.log('verify_email token: ', req.query.token);

User.findOne({authToken: req.query.token}, function(err, user){
    if(err){
        console.log(err);
    } else {
        console.log(user);

        user.IsAuthenticated = true;
        user.save(function(err){
            if(err){
                console.log(err);
            } else {
                console.log('Successfully updated user');
                console.log(user);

                sendgrid({
                    to:     user.email,
                    from:   'pektospioneers.com',
                    subject:'Email COnfirmed!',
                    html:   'Thank you'
                }, function(err, json){
                    if(err){
                        console.log(err);
                    } else {
                        console.log(json);
                    }
                });
                res.send(user);
            }
        });
    }
});
    req.flash("success_msg",'Email has been confirmed!');
    res.redirect('/users/login');
});
这是我的用户模型

//new user in the model(user.js)
    var newUser = new User({
        name: name,
        email: email,
        authToken: authToken,
        IsAuthenticated: false,
        username: username,
        password: password,
        field: field,
        e_money: e_money //temporary emoney
    });
现在问题就在这里。我仍然可以在注册后直接登录,即使没有确认我的电子邮件。那么这里应该有什么问题,先生/女士

我试过这样的护照

passport.use(new LocalStrategy(
function(username, password, IsAuthenticated, done){

User.IfIsAuthenticated(IsAuthenticated, function(err, authenticated)}
    if(err) throw err;
    if(!authenticated){
        return done(null, false, {message: 'Please confirm your email first'});
    }

User.getUserByUsername(username, function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }

User.comparePassword(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
            return done(null, user);
        }
        else{
            return done(null, false, {message: "Invalid password"});
        }
    });
  });
});
}));
module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
}
/*
*need to know if authenticated or not
*so that if it is not yet authenticated 
*the newly registered user cannot logged in
*/ 
module.exports.ifIsAuthenticated = function(IsAuthenticated, callback){
var query = {IsAuthenticated:IsAuthenticated};
User.findOne(query, callback);
}
但它不起作用,它总是说返回完成不是一个函数

在我的user.js上是这样的

passport.use(new LocalStrategy(
function(username, password, IsAuthenticated, done){

User.IfIsAuthenticated(IsAuthenticated, function(err, authenticated)}
    if(err) throw err;
    if(!authenticated){
        return done(null, false, {message: 'Please confirm your email first'});
    }

User.getUserByUsername(username, function(err, user){
    if(err) throw err;
    if(!user){
        return done(null, false, {message: 'Unknown User'});
    }

User.comparePassword(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
            return done(null, user);
        }
        else{
            return done(null, false, {message: "Invalid password"});
        }
    });
  });
});
}));
module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
}
/*
*need to know if authenticated or not
*so that if it is not yet authenticated 
*the newly registered user cannot logged in
*/ 
module.exports.ifIsAuthenticated = function(IsAuthenticated, callback){
var query = {IsAuthenticated:IsAuthenticated};
User.findOne(query, callback);
}

通过在这里添加这行代码,我实现了我想要的

User.comparePassword(password, user.password, function(err, isMatch){
    if(err) throw err;
    if(isMatch && !User.email){
       return done(null, false, {message: "Please confirm your email first!"});
    }else if(isMatch && User.email){
       return done(null, user);
    }
    else{
        return done(null, false, {message: "Invalid password"});
    }
});
只需要回答这个问题,以供其他人将来参考。快乐编码