2014-10-26 199 views
0

當我撥打passport.authenticate('facebook');時,頁面會一直加載,並會因超時而失敗。 facebook身份驗證屏幕從不出現。任何線索我犯了什麼錯誤?Passport Facebook身份驗證不會顯示Facebook身份驗證屏幕

以下是我的代碼片段。

 var User = require('../models/user.js'), 
     passport = require('passport'), 
     FacebookStrategy = require('passport-facebook').Strategy; 
    passport.use(new FacebookStrategy({ 
      clientID: 'appId-XXX', 
      clientSecret: 'appSecret-xxx', 
      callbackURL: 'https://xxx/auth/facebook/callback' 
     }, 
     function(accessToken, refreshToken, profile, done) { 
      process.nextTick(function() { 
       var authID = 'facebook' + profile.id; 
       User.findOne({ 
        authId: authID 
       }, function(err, user) { 
        if (err) return done(err, null); 
        if (user) return done(null, user); 
        user = new User({ 
         authID: authID, 
         name: profile.displayName, 
         created: Date.now(), 
         role: 'customer' 
        }); 
        user.save(function(err) { 
         if (err) return done(err, null); 
         done(null, user); 
        }); 
       }); 
      }); 

     })); 

    app.use(passport.initialize()); 
    app.use(passport.session()); 

    app.get('/auth/facebook', function(req, res, next) { 
     console.log('Calling Facebook Authenticate'); 
     passport.authenticate('facebook'); 
    }); 

    app.get('/auth/facebok/callback', passport.authenticate('facebook', { 
     successRedirect: options.successRedirect, 
     failureRedirect: options.failureRedirect 
    })); 
+1

將其更改爲'passport.authenticate(的Facebook')(REQ,水庫,下一個);'在'/ auth /中facebook'路線 – laggingreflex 2014-10-26 18:25:02

+0

@laggingreflex非常感謝它的工作原理。請將其作爲回答發佈... – Muthukumar 2014-10-27 15:07:14

回答

0

passport.authenticate返回middlware,被用作這樣的:

app.get('/auth/facebook', passport.authenticate('facebook')); 

既然你調用它,而不是通過它直接和您應該撥打返回中間件傳遞的req, res, next

app.get('/auth/facebook', function(req, res, next) { 
    console.log('Calling Facebook Authenticate'); 
    passport.authenticate('facebook')(req, res, next); 
});