【问题标题】:cb is not a function when using passport for facebook authentication使用护照进行 facebook 身份验证时,cb 不是功能
【发布时间】:2022-10-06 23:01:57
【问题描述】:

我正在使用护照使用 nodejs 和 reactjs 应用程序进行 facebook 身份验证。我有以下代码

// index.js

const session = require(\"express-session\");
const passport = require(\'passport\');

app.use (
      session ({
        secret: \"FMfcgzGllVtHlrXDrwtpNdhLRXlNtVzl@18088dda1\",
        resave: true,
        saveUninitialized: true,
        cookie: {
            expires: 60 * 60 * 24,
        }
     })
);
app.use(passport.initialize());
app.use(passport.session()); 
require(\"./passportConfig\")(passport);

// in passportConfig.js

const User = require(\"./models/user\");

const FacebookStrategy = require(\'passport-facebook\');

module.exports = function (passport) {

    passport.use(new FacebookStrategy({
            clientID: process.env.FACEBOOK_CLIENT_ID,
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
            callbackURL: \'/user/facebook/callback\',
            profileFields: [\'id\', \'displayName\', \'email\', \'name\', \'picture\'],
            passReqToCallback: true,
            enableProof: true
        },
        (accessToken, refreshToken, profile, cb) => {
            console.dir(profile);
            // save the profile on the Database
            // Save the accessToken and refreshToken if you need to call facebook apis later on
            return cb(null, profile);
        }));


    passport.serializeUser((user, cb) => {
        cb(null, user.id);
    });

    passport.deserializeUser((id, cb) => {
        User.fetchById(id).then(result => {
            cb(null, result[0]);
        }).catch(err => {
            cb(err, null);
        });
    });

};

运行代码“cb 不是函数”时出现以下错误。我检查了文档,这应该可以。我究竟做错了什么?

    标签: node.js reactjs passport-facebook


    【解决方案1】:

    我遇到了同样的问题。通过将额外的参数传递给验证回调找到了解决方法。库内部有一些函数数量检查,可以将额外的参数传递给验证回调:

    passport.use(new FacebookStrategy({
            clientID: process.env.FACEBOOK_CLIENT_ID,
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
            callbackURL: '/user/facebook/callback',
            profileFields: ['id', 'displayName', 'email', 'name', 'picture'],
            passReqToCallback: true,
            enableProof: true
        },
        (accessToken, refreshToken, params, profile, cb) => {
          console.log("params: " +params);
          console.log(profile);
          return cb(null, profile);
        }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2016-10-02
      • 2015-08-21
      • 2017-10-24
      • 2013-09-04
      • 1970-01-01
      • 2013-08-26
      • 2015-09-06
      相关资源
      最近更新 更多