【问题标题】:Node.js Passport Facebook Authentication no email returnedNode.js Passport Facebook 身份验证未返回电子邮件
【发布时间】:2016-11-12 20:29:05
【问题描述】:

我正在尝试使用 node.js 中的护照设置 facebook 身份验证。当我运行该应用程序并转到 /auth/facebook 时,我会转到一个 facebook 页面以允许 facebook 返回我的电子邮件。但是在我点击确定后,我得到一个页面(回调),上面写着“没有与此帐户关联的电子邮件!”根据代码,这意味着 profile.emails 为空。我错过了什么?

这些是我启动应用程序时出现的警告。不过我不知道是不是他们的问题。

express-session deprecated undefined resave option; provide resave option auth.js:44:37
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option auth.js:44:37

这是授权码。我正在学习 edx 的 MEAN 堆栈介绍课程 M101X。

function setupAuth(User, app) {
  var passport = require('passport');
  var FacebookStrategy = require('passport-facebook').Strategy;

  // High level serialize/de-serialize configuration for passport
  passport.serializeUser(function(user, done) {
    done(null, user._id);
  });

  passport.deserializeUser(function(id, done) {
    User.
      findOne({ _id : id }).
      exec(done);
  });

  // Facebook-specific
  passport.use(new FacebookStrategy(
    {
      clientID: process.env.FACEBOOK_CLIENT_ID,
      clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
      callbackURL: 'http://localhost:3000/auth/facebook/callback'
    },
    function(accessToken, refreshToken, profile, done) {
      if (!profile.emails || !profile.emails.length) {
        return done('No emails associated with this account!');
      }

      User.findOneAndUpdate(
        { 'data.oauth': profile.id },
        {
          $set: {
            'profile.username': profile.emails[0].value,
            'profile.picture': 'http://graph.facebook.com/' +
              profile.id.toString() + '/picture?type=large'
          }
        },
        { 'new': true, upsert: true, runValidators: true },
        function(error, user) {
          done(error, user);
        });
    }));

  // Express middlewares
  app.use(require('express-session')({
    secret: 'this is a secret'
  }));
  app.use(passport.initialize());
  app.use(passport.session());

  // Express routes for auth
  app.get('/auth/facebook',
    passport.authenticate('facebook', { scope: ['email'] }));

  app.get('/auth/facebook/callback',
    passport.authenticate('facebook', { failureRedirect: '/fail' }),
    function(req, res) {
      res.send('Welcome, ' + req.user.profile.username);
    });
}

module.exports = setupAuth;

【问题讨论】:

    标签: node.js mongodb passport.js mean-stack passport-facebook


    【解决方案1】:

    您是否尝试过在“Facebook 身份验证问题”下的“Facebook 身份验证问题”下的该课程的讨论选项卡中建议的那样在 passport.use 块中添加 profileFields?

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2018-10-15
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2023-03-22
      • 2017-07-03
      • 2022-01-01
      相关资源
      最近更新 更多