passport-facebook没有重定向

时间:2014-10-20 21:07:41

标签: node.js passport-facebook

这是我的愚蠢nodejs模块。当passport.authenticate('facebook')被调用时,它就会冻结。

我使用的是Express 4.2.0。有什么想法吗?

身份验证呼叫不会阻止。我怎么想从函数返回?

我见过的所有示例都在app.js中调用了authenticate。我不想在app.js中配置身份验证策略。

var express = require('express');
var router = express.Router();

var passport = require('passport')
var facebookStrategy = require('passport-facebook').Strategy;

passport.use(new facebookStrategy({
        clientID: "xxx",
        clientSecret: "xxx",
        callbackURL: "http://localhost:3000/auth/facebook/callback"
    },
    function(accessToken, refreshToken, profile, done) {

    }
));

router.get('/', function(req, res) {
    passport.authenticate('facebook');
});


module.exports = router;

1 个答案:

答案 0 :(得分:4)

必须done()回调函数中调用facebookStrategy。没有它,事情就会挂起,因为调用done()是系统知道如何继续进行的。即使你现在只有那里的存根代码,你至少需要done()来保持控制流正常进行。

其次,passport.authenticate 返回一个中间件功能,所以你不要直接调用它,你将它传递给表达:

router.get('/', passport.authenticate('facebook')); //don't wrap here

关于您的上述router.get回调的第二部分不正确是它永远不会响应,这也是一种快速挂起的方法。

修复后,您还需要一条路线来处理Facebook回调:

var options = {
  successRedirect: '/home',
  failureRedirect: '/bummer-dude'
};
router.get('/auth/facebook/callback', passport.authenticate('facebook', options));