Passport facebook身份验证不显示facebook身份验证屏幕

时间:2014-10-26 17:10:44

标签: node.js express passport-facebook

当我调用passport.authenticate('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 个答案:

答案 0 :(得分: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);
});