任何人都可以帮我解决这个问题吗?回调永远不会结束。我跟随护照facebook指南和护照-facebook指南,两者都有同样的问题。 这是我的代码:
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ facebookId: profile.id },{name:profile.displayName},
function (err, user) {
return done(err, user);
});
}
));
app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/error',
successRedirect: '/success' }));
配置和依赖
node.js版本0.10
“express”:“3.2.1”,
“护照”:“0.1.16”,
“passport-facebook”:“0.1.5”,
“paypal-ipn”:“1.0.1”,
“ejs”:“0.8.3”,
“sequelize”:“1.7.0-alpha1”,
“winston”:“0.7.1”,
“mysql”:“2.0.0-alpha8”
答案 0 :(得分:2)
像findOrCreate()
这样的Sequelize方法不接受回调函数来处理结果,但返回a promise-like object:
User.findOrCreate(
{ facebookId : profile.id },
{ name : profile.displayName}
).success(function(user) { // called when findOrCreate was successful
done(null, user);
}).error(function(err) { // called when findOrCreate failed
done(err);
});
或者,您可以使用complete
或done
作为快捷方式(它们使用与策略的err, result
方法相同的done
签名,因此您可以直接传递):
User.findOrCreate(
{ facebookId : profile.id },
{ name : profile.displayName}
).complete(done);
// or
User.findOrCreate(
{ facebookId : profile.id },
{ name : profile.displayName}
).done(done);
在您的情况下,您提供给findOrCreate()
的回调永远不会被调用,并且永远不会调用策略回调的done()
函数。