我正在使用我的node.js应用程序的护照。 当我想在本地验证用户时,我可以简单地执行此操作
function local(req, res) {
req._passport.instance.authenticate('local', function(err, user, info) {
if(err) {
return workflow.emit('exception', err);
}
// and so on
res.end('some data');
}
}
但是当我想使用facebook策略时,我必须使用像这样的redirectUrls。
function signinFacebook(req, res, next) {
req._passport.instance.authenticate('facebook')(req, res, next);
}
function facebookCallback(req, res, next) {
req._passport.instance.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/'
})(req, res, next);
}
这样我就无法发送响应数据,我发送本地策略。
任何人都可以帮我修复它。我不想给成功和失败重定向,如果一切顺利,就像本地策略一样,我想调用一些函数。
答案 0 :(得分:2)
我在Passport's documentation找到了这个,这可能会有所帮助。
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
请注意,使用自定义回调时,应用程序负责建立会话(通过调用req.login())并发送响应。