无法显示Passport.js中的flash消息



如果身份验证失败,我在发送闪存时遇到问题。除了一切都好。当我复制示例时(https://github.com/jaredhanson/connect-flash)到我的应用程序的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的例子也不起作用。。。

如果我没有错,那么传递给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) {

最新更新