2016-01-10 32 views
1

如果身份驗證失敗,則發送閃存時出現問題。除了一切正常。當我複製示例(https://github.com/jaredhanson/connect-flash),以我的應用程序的提示信息工作正常...無法顯示來自Passport.js的Flash消息

這裏是我的代碼:

//routes 
app.get('/login', function (req,res){ 
    res.render('login', { 
     authMessage: req.flash('authMessage') 
    }); 
}); 

app.post('/login', passport.authenticate('local', { 
    failureRedirect: '/login', 
    failureFlash: true 
    }), function(req,res){ 
    res.send('ok'); 
}); 

//local strategy 
passport.use(new LocalStrategy(
    function(username, password, authCheckDone) { 
     UserDetails.findOne({username : username}).then(
      function(user){ 
       if (!user) { 
        console.log('bad username'); 
        return authCheckDone(null, false, {authMessage: 'Wrong name'}); 
       } 
       if (user.password !== password) { 
        console.log('bad password'); 
        return authCheckDone(null, false, {authMessage: 'Wrong password'}); 
       } 
       return authCheckDone(null, user); 
      }), 
      function(error){ 
       return authCheckDone(error); 
     }; 
    } 
)); 

//ejs 
<% if (authMessage.length > 0) { %> 
    <p>test</p> 
    <%= authMessage %> 
<% } %> 

我讀過某處這個問題可能與安全不相關使用https,但如果這將是這種情況下,從github的例子也不會工作...

回答

0

如果我沒有錯,您傳遞給LocalStrategy的回調應具有作爲請求對象的第一個參數。所以,你的功能應該是這樣的:

function(req, username, password, authCheckDone) { 
    // your code 

後,根據我有,你應該以下面的方式返回結果的authCheckDone一個例子:

return authCheckDone(null, false, req.flash('authMessage', "your message")); 

但要確保你創造LocalStrategy對象的方式如下:

new LocalStrategy({ 
    passReqToCallback: true // don't forget this 
}, function(req, username, password, authCheckDone) { 
+0

那個; s it!謝謝 :) –