2013-05-04 40 views
3

任何人都可以幫我解決這個問題嗎?回調永遠不會結束。我遵循護照臉書指南和護照臉書指南,都有同樣的問題。 這裏是我的代碼:Node.js和passport-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" ,

「護照臉譜」: 「0.1.5」,

「p aypal-IPN 「: 」1.0.1「,

」EJS「: 」0.8.3「,

」sequelize「: 」1.7.0-α1「,

」溫斯頓「:」 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); 
}); 

或者,你可以使用completedone作爲快捷方式(它們使用相同的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

謝謝robertklep! – lmnogueira 2013-11-27 12:26:22