繁体   English   中英

无法从Facebook登录名获取电子邮件(API版本2.8)

[英]Can't Get Email from Facebook Login(API Version 2.8)

对于我的应用程序(Node.js),我使用的是Passport-facebook,并且一切正常,除了无法收到用户电子邮件。 我在这个问题上发现了很多问题,但是由于某种原因,它们无法解决我的问题。 我真的很乐意提供帮助。 所以我的配置:

app.js

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

// in scope i tried a different options like ['email'] or ['emails'] and so go on

app.get('/auth/facebook/callback',
  passport.authenticate('facebook', {
    successRedirect: '/',
    failureRedirect: '/login'
}));

护照.js:

passport.use('facebook', new FacebookStrategy({
  clientID        : secret.facebook.clientID,
  clientSecret    : secret.facebook.clientSecret,
  callbackURL     : secret.facebook.callback
},
  function(access_token, refreshToken, profile, done) {
    console.log(profile) // here i got all profile data except email
    process.nextTick(function() {
      User.findOne({ 'facebook.id' : profile.id }, function(err, user) {
        if (err)
          return done(err);
          if (user) {
            return done(null, user);
          } else {
            var newUser = new User();
            console.log(profile.email) // here i got undefined
            newUser.facebook.id = profile.id;
            newUser.facebook.token = access_token;
            newUser.facebook.firstName = profile.name.givenName;
            newUser.facebook.lastName = profile.name.familyName;
            newUser.facebook.email = profile.email;

            newUser.save((err) => {
              if (err)
                throw err;
              return done(null, newUser);
            });
         } 
      });
    });
}));

facebook-secret.js

module.exports = {
  facebook: {
    clientID: '****',
    clientSecret: '********',
    callback: '/auth/facebook/callback',
    profileFields: ['id', 'email']
  }
}

在UserSchema中:

facebook: {
    id: String,
    token: String,
    email: String,
    name: String,
  }

facebok-设置 脸谱网设置

图-API

图形API

在password.js中:

passport.use('facebook', new FacebookStrategy({
  clientID        : secret.facebook.clientID,
  clientSecret    : secret.facebook.clientSecret,
  callbackURL     : secret.facebook.callback
},

改成:

 passport.use('facebook', new FacebookStrategy({
  clientID        : secret.facebook.clientID,
  clientSecret    : secret.facebook.clientSecret,
  callbackURL     : secret.facebook.callback,
  profileFields   : secret.facebook.profileFields
},

我的profileField:profileFields:['id','displayName','email','first_name','middle_name','last_name']

尝试像在图形API(?fields = id,email ...)中使用的那样以参数形式传递url中的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM