2013-05-04 4 views
3

Может ли кто-нибудь помочь мне с этой проблемой? обратный вызов никогда не заканчивается. Я следил за паспортом в справочнике по facebook и паспорт-путеводитель по facebook, и у обоих проблема такая же. Вот мой код:Node.js и обратный вызов паспорт-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

"Экспресс": "3.2.1",

"паспорт": «0,1. 16" ,

"паспортного facebook": "0.1.5",

«р aypal-IPN ": "1.0.1",

"EJS": "0.8.3",

"sequelize": "1.7.0-альфа1",

"Winston":" 0.7.1" ,

"MySQL": "2.0.0-alpha8"

ответ

2

методы Sequelize как findOrCreate() не принимают функцию обратного вызова для обработки результатов, но вернуться 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().

+0

Thanks robertklep! – lmnogueira

Смежные вопросы