Node.js/Express/Jade+;Passport.js failureRedirect错误呈现页面

Node.js/Express/Jade+;Passport.js failureRedirect错误呈现页面,node.js,express,pug,passport.js,Node.js,Express,Pug,Passport.js,在/login的身份验证失败时,passport.js使用failureFlash保存错误消息,并重定向到/login(同一页)。发送的HTML是正确的(即,包括failureFlash消息),但在客户端错误地呈现为“未定义”,尽管(在Jade模板中)处于保证其定义的逻辑中。我的HTML(获取/登录)和提交(发布/登录)路径使用相同的URL;这可能是问题的一部分吗?可以找到整个代码库 app.js本地策略 passport.use(new LocalStrategy( function

在/login的身份验证失败时,passport.js使用failureFlash保存错误消息,并重定向到/login(同一页)。发送的HTML是正确的(即,包括failureFlash消息),但在客户端错误地呈现为“未定义”,尽管(在Jade模板中)处于保证其定义的逻辑中。我的HTML(获取/登录)和提交(发布/登录)路径使用相同的URL;这可能是问题的一部分吗?可以找到整个代码库


app.js本地策略

passport.use(new LocalStrategy(
    function(username, password, done) {
        // asynchronous verification, for effect...
        process.nextTick(function () {
            var user = {'id': 1};
            if(username !== "asdf") {
                return done(null, false, { error: 'Unknown user '+username+'.'});
            }else if(password !== "zxcv") {
                return done(null, false, { error: 'Invalid password.'})
            }

            return done(null, user);
    });
  }
));

app.js登录获取路径

app.get('/login', function(req, res) {
    var m1 = req.flash('error')[0]
    console.log(m1)
    res.render('login', { user: req.user, message: String(m1), sample: "Sanity check."});
});

app.js登录发布路线

app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login', failureFlash: 'THIS IS A SANITY CHECK ERROR', successFlash: 'Welcome!' }),
    function(req, res) {
        console.log('User login successful.');
        var redirect_to = req.session.redirect_to || '/'
        delete req.session.redirect_to;
        res.send({redirect: String(redirect_to)})
        //res.redirect(200, redirect_to);

    });
    app.get('/logout', function(req, res){
        req.logout();
        res.redirect(200, '/');
    });

client_login.js与/login的HTML一起提供

$(document).on('pageinit', function() {
    $(document).on('click', '#submit', function() {
        if($('#username').val().length > 0 && $('#password').val().length > 0){
            // Send data to server through the ajax call
            // action is functionality we want to call and outputJSON is our data
            $.ajax({
                url: '/login',
                data: {action : 'login', username : $('#username').val(), password : $('#password').val()},
                type: 'post',
                async: 'true',
                dataType: 'json'
            })
            .done(function (result) {
                console.log('Done!');
                window.location.replace(result.redirect);
            })
            .always(function (result) {
                console.log('Always!');
            })
            .fail(function (request,error) {
                console.log('Fail!');
                // This callback function will trigger on unsuccessful action
                //alert('Network error has occurred please try again!');
            })
        } else {
            if($('#username').val().length <= 0 && $('#password').val().length > 0) {
                alert('Please fill in your username.');
            } else if($('#username').val().length > 0 && $('#password').val().length <= 0) {
                alert('Please fill in your password.');
            } else {
                alert('Please fill in your username and password.');    
            }
        }
        return false; // cancel original event to prevent form submitting
    })
})

从底部服务器发送的HTML,在顶部呈现的页面。注意“未定义”与“这是一个健全性检查错误”。另请注意,此项目使用jQuery Mobile。你知道是什么导致了这种行为吗?页面的javascript不应该触碰它,但重定向上也没有可见的闪烁,这很好,但让我怀疑


嗯,我很笨。您不能重定向以响应AJAX帖子

因此,我对AJAX帖子进行了如下修改:

        .fail(function (request,error) {
            console.log('Fail!');
            window.location.replace(window.location.href);

        })
window.location.replace(window.location.href)
感觉有点笨拙&可能有更好的方法来刷新页面,但就目前而言,这是可行的

。。。这就是我在这里发帖的原因。橡皮鸭调试工作

        .fail(function (request,error) {
            console.log('Fail!');
            window.location.replace(window.location.href);

        })