如何使用Node.js使用passport.js设置成功的身份验证回调?

时间:2016-09-29 10:19:20

标签: node.js facebook authentication passport.js

我试图在我的MEAN堆栈应用程序中设置facebook身份验证。编写的代码工作到了在Facebook上验证用户的程度,但是当它被发送回我的应用程序时,回调函数会运行,但int a = hours<=40?0:1; switch(a){ case 0: //do <=40 stuff. break; case 1: //do >40 stuff. break; } 部分不会运行。

这是路由文件中的代码:

passport.authenticate('facebook'.....

&#34;回调&#34;在控制台中输出但是应用程序刚处于加载状态,直到它超时。

这是我用来配置护照的passport.js文件:

    app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

    app.get('/auth/facebook/callback', function() {
        console.log('callback')
         passport.authenticate('facebook', {
            successRedirect : '/',
            failureRedirect : '/fail'
          })
    });

1 个答案:

答案 0 :(得分:0)

/auth/facebook/callback中,您正在路由处理程序中执行passport.authenticate而不是作为中间件,即。在文档中称为custom callback。此调用返回一个函数,但您不执行它,因此没有任何反应。

您需要在此处运行passport.authenticate作为中间件(the usual way),或实际使用reqresnext您的路由处理程序接收的参数(但您省略)并将它们传递给路由处理程序中的authenticate调用。

中间件方式显示在documentation of passport-facebook中,即。对你来说就是:

app.get('/auth/facebook/callback',
    passport.authenticate('facebook', {
        successRedirect : '/',
        failureRedirect : '/fail'
    })
);

如果您出于某种原因希望使用自定义回调,则需要以下内容:

app.get('/auth/facebook/callback', function(req, res, next) {
    passport.authenticate('facebook', function(err, user, info) {
        // Do your things and then call `req.logIn` and stuff
    })(req, res, next);
});