2

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

我正在使用 Express 4.2.0。有任何想法吗?

验证调用不会阻塞。我应该如何从函数中返回?

我见过的所有例子都authenticate在 app.js中调用。我不想在 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;
4

1 回答 1

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));
于 2014-10-21T00:02:50.023 回答