Node.js护照自定义回调

时间:2016-02-08 22:38:39

标签: node.js passport.js

我正在使用我的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);
}

这样我就无法发送响应数据,我发送本地策略。

任何人都可以帮我修复它。我不想给成功和失败重定向,如果一切顺利,就像本地策略一样,我想调用一些函数。

1 个答案:

答案 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())并发送响应。