0

對於我的應用程序(Node.js),我正在使用passport-facebook,除了我無法獲取用戶電子郵件外,一切運行良好。我在這個問題上發現了很多問題,但由於某些原因,他們沒有解決我的問題。我會很樂意提供一些幫助。所以,我的配置:無法從Facebook登錄獲取電子郵件(API版本2.8)

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

passport.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的 - 設置facebook-settings

圖 - API

graph-api

回答

0

嘗試通過在範圍URL作爲PARAM就像你在圖形API使用(字段= ID,電子郵件...?)。

+0

nope不工作(回調卡住,沒有返回或只是在另一個不存在的頁面上轉換,並重定向到我的默認值) –

+0

但這部分{範圍:'電子郵件'}的作品,因爲我這樣寫{範圍:['public _profile','user_friends','email']}然後在Telerik Fiddler catch請求中HTTP/1.1 302找到 X-Powered-By:Express 位置:facebook.com/dialog/oauth?response_type=code&redirect_uri=http%3A %2F%2Flocalhost%3A8080%2Fauth%2Ffacebook%2Fcallback&scope = public_profile%2Cuser_friends%2Cemail&client_id = 422349 ...我什至不能理解,這是我的問題或一些FB配置。我完全卡住了。 –

0

在passport.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', '顯示名', '電子郵件', 'FIRST_NAME',「middle_name ','last_name']

相關問題