我正在使用 Passport-facebook 登录我的用户,当 facebook 调用 myt 回调时,我进入了未定义的循环。我读过很多网站和问题,即使在这里,但实际上,我找不到任何解决方案。
这是代码,我将把它们全部放在这里,就像放入单个文件中一样:
var restify = require('restify');
var passport = require('passport-restify');
var FacebookStrategy = require('passport-facebook').Strategy;
var server = restify.createServer();
server.use(restify.bodyParser());
passport.use(new FacebookStrategy({
clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://192.168.0.13:8080/login/facebook/callback'
}, function (token, refreshToken, profile, done) {
//this code never is executed, why?
return done(null, profile);
}));
server.use(passport.initialize());
server.get('/login/facebook', function(req, res, next) {
passport.authenticate('facebook', { display: null, scope: ['email']})(req, res, next);
});
server.get('/login/facebook/callback', (req, res, next) => {
//here is where the loop happends, i´m getting into this and never can go out from here
passport.authenticate('facebook', function(profile) {
//I could not execute this
if (!profile || !profile.id) {
return res.json(500, 'We had trouble signing you up with Facebook. Please try again or sign-up via email.');
} else {
res.json(200, profile);
}
})(req, res, next);
});
server.listen(config.port, function () {
console.log('%s listening at %s', server.name, server.url);
});
真的,我非常沮丧,我现在,我现在,有成千上万的帖子谈论这个......我尝试了所有这些,无论如何我在这里......
谢谢。
最佳答案
过了一会儿我发现了这个问题。我发布的内容是多次测试的结果。
问题是我使用括号的方式很糟糕。 最简单的是,我这样做:
server.get('/login/facebook/callback', passport.authenticate('facebook', (req, res, next) => { /* magic here*/ });
因此,next() 执行的回调就像传递到authenticate 方法中一样传递。这并不是因为我不明白问题所在,而是我没有意识到错误在哪里。
正确的做法应该是:
server.get('/login/facebook/callback', passport.authenticate('facebook'), (req, res, next) => { /* magic here */ });
感谢大家的合作。
关于javascript - Node.js Passport -facebook 回调循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39218270/