这是我的愚蠢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;
答案 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));