2014-10-26 144 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); 
});