【问题标题】:passport facebook authentication is not providing email address护照 Facebook 身份验证未提供电子邮件地址
【发布时间】:2017-07-03 14:56:18
【问题描述】:

我做了 Stackoverflow 中解释的所有方法,但没有用

passport.use(new FacebookStrategy({
    clientID: 'CLIENT ID',
    clientSecret: 'CLIENT SECRET',
    callbackURL: "/auth/facebook/callback",
    profileFields:['id', 'emails', 'link', 'locale', 'name',
  'timezone', 'updated_time', 'verified', 'displayName']
  },
  function(accessToken, refreshToken, profile, done) {
    console.log(profile);
    var authId = 'facebook:' + profile.id;   
    for(var i = 0; i < users.length; i++){
      var user = users[i];
      if(user.authId === authId){   
        return done(null, user);
      }
    }

    var new_user = {
      'authId':authId,
      'displayName':profile.displayName
    };
    users.push(new_user);
    done(null, new_user);
  }
));

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

但在我的控制台中

 _json:
   { id: 'MY ID',
     link: 'https://www.facebook.com/app_scoped_user_id/MY_ID/',
     locale: 'ko_KR',
     last_name: 'LAST_NAME',
     first_name: 'FIRST_NAME',
     timezone: 9,
     updated_time: '2016-06-26T06:25:28+0000',
     verified: true,
     name: 'MY NAME' } }

没有电子邮件字段是什么问题? 或者我的facebook账户授权有什么问题吗?

【问题讨论】:

    标签: node.js facebook passport.js passport-facebook


    【解决方案1】:

    试试这个:

    passport.use(new FacebookStrategy({
        clientID: 'CLIENT ID',
        clientSecret: 'CLIENT SECRET',
        callbackURL: "/auth/facebook/callback",
        profileFields:['id', 'emails', 'link', 'locale', 'name',
      'timezone', 'updated_time', 'verified', 'displayName']
      },
      function(accessToken, refreshToken, profile, done) {
        console.log(profile.emails[0].value);
        var authId = 'facebook:' + profile.id;   
        for(var i = 0; i < users.length; i++){
          var user = users[i];
          if(user.authId === authId){   
            return done(null, user);
          }
        }
    
        var new_user = {
          'authId':authId,
          'displayName':profile.displayName
        };
        users.push(new_user);
        done(null, new_user);
      }
    ));
    

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

    【讨论】:

      【解决方案2】:

      在 profileFields 对象中,使用“电子邮件”而不是“电子邮件”。

      profileFields:['id', 'emails', 'link', 'locale', 'name',
        'timezone', 'updated_time', 'verified', 'displayName']
      

      替换为

      profileFields:['id', 'email', 'link', 'locale', 'name',
        'timezone', 'updated_time', 'verified', 'displayName']
      

      【讨论】:

      • 感谢您的评论!但它不起作用......:(我不知道为什么......!!同样的情况
      • 我也试过了,效果很好,不知道哪里出了问题
      • 我认为我的 facebook 帐户授权存在一些问题,我会检查它。感谢您的评论:)
      • 通过您的 facebook 开发者帐户创建测试用户并对其进行测试
      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多