我设置了local
策略,但failureRedirect
似乎无法正常运行。发生连接错误时(例如,数据库的URL错误),响应是错误500而不是重定向到指定的路由。
这是我的路线代码:
router.route('/login')
.post(passport.authenticate('local', {
failureRedirect: '/'
}), function(req, res){
console.log('user logged in');
res.redirect('../console');
});
以下是我对local
策略的实施:
module.exports = function(){
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done){
pg.defaults.ssl = true;
pg.connect(process.env.DATABASE_URL, function(err, client) {
if (err){
console.log('Connection issue when logging in: ' + JSON.stringify(err));
done('Error with database,', null); // this is the problem area!!!
} else {
client
.query(`SELECT * FROM agent WHERE email='${email}'`, function(err, result) {
if(err || result.rows.length === 0 ) {
console.log('Query issue when loggin in: '+ JSON.stringify(err));
done(null, false);
} else {
var user = result;
console.log('ready to log user in');
done(null, user);
}
});
}
});
}
));
};
我想也许我使用done()
回调函数是错误的,但我遵循了文档。谢谢你的帮助。
答案 0 :(得分:1)
我遇到的问题是,如果用户不存在,我就犯了错误 - done('some error', null);
并且这看起来并不像Passport所期望的那样。
它支持虚假用户的概念作为失败的另一个标志。因此,如果您找不到用户,则相应的签名将为done(null, null)
。
因此,当出现数据库错误时,您会在数据库中输入错误'作为错误。你应该把null。
答案 1 :(得分:-1)
你必须
抛出新错误(' hello world')
触发失败重定向,您也可以尝试
https://docs.nodejitsu.com/articles/errors/what-is-try-catch/