首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js和passport-facebook回调永远不会结束

Node.js和passport-facebook回调永远不会结束
EN

Stack Overflow用户
提问于 2013-05-04 10:58:05
回答 1查看 1.2K关注 0票数 3

有人能帮我解决这个问题吗?回调永远不会结束。我关注了passport facebook指南和passport-facebook指南,它们都有同样的问题。下面是我的代码:

代码语言:javascript
复制
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",

"passport":"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“

EN

回答 1

Stack Overflow用户

发布于 2013-05-04 15:12:59

findOrCreate()这样的Sequelize方法不接受回调函数来处理结果,而是返回a promise-like object

代码语言:javascript
复制
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);
});

或者,您可以使用completedone作为快捷方式(它们使用与策略的done方法相同的err, result签名,因此您可以直接传入):

代码语言:javascript
复制
User.findOrCreate(
  { facebookId : profile.id },
  { name       : profile.displayName}
).complete(done);
// or
User.findOrCreate(
  { facebookId : profile.id },
  { name       : profile.displayName}
).done(done);

在您的例子中,您提供给findOrCreate()的回调永远不会被调用,策略回调的done()函数也永远不会被调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16370136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档