【问题标题】:Passport facebook authentication does not show the facebook authentication screenPassport facebook 身份验证不显示 facebook 身份验证屏幕
【发布时间】:2014-10-27 23:18:58
【问题描述】:

当我调用 passport.authenticate('facebook'); 时,页面继续加载并因超时而失败。 facebook 身份验证屏幕永远不会出现。关于我在哪里犯错的任何线索?

以下是我的代码 sn-ps。

       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
   }));

【问题讨论】:

  • 在您的/auth/facebook 路由中将其更改为passport.authenticate('facebook')(req, res, next);
  • @laggingreflex 非常感谢它的工作原理。请将其发布为答案...

标签: node.js express passport-facebook


【解决方案1】:

passport.authenticate 返回一个中间件,可以这样使用:

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);
});

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 2016-09-28
    • 2018-02-24
    • 1970-01-01
    • 2015-08-10
    • 2017-11-27
    • 2011-09-17
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多