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