2017-06-25 73 views
0

我在登錄我的系統之前首先驗證我的電子郵件地址有問題。這是我的代碼到目前爲止。在登錄之前驗證電子郵件(Nodejs,Mongoose + MongoDB,Passportjs)

這行代碼是我驗證我的電子郵件地址,當他點擊他/她的電子郵件地址的鏈接時,它將重定向到我的登錄表單。

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'); 
}); 

,這裏是我的usermodel

//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 
    }); 

現在的問題是在這裏。即使沒有確認我的電子郵件,我仍然可以在註冊後直接登錄。所以先生/女士應該是什麼問題。

我試過passportjs這樣

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"}); 
     } 
    }); 
    }); 
}); 
})); 

但它不工作它總是說做的回報是不是一個函數

和我user.js的,它只是像這樣

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); 
} 

回答

0

通過在這裏添加這行代碼我實現了我想要的

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"}); 
    } 
}); 

只需回答這個問題以供其他人蔘考。快樂編碼