2016-09-13 33 views
0

领域我一直用这个:护照的Facebook返回undefined除了ID和显示名

作用域['email', 'public_profile']

['emails', 'id', 'displayName', 'name', 'photos']

有谁解决这个问题呢? 我在这里阅读了很多答案。但是,没有人对我的作品或已经过时(约2012/13年)

只是默认护照代码:

// Configure Facebook auth Strategy 
// ================================================================== 
passport.use(new FacebookStrategy({ 
    clientID: CONFIG.facebook.id, 
    clientSecret: CONFIG.facebook.secret, 
    callbackURL: `${CONFIG.url}/${CONFIG.routes.auth}/facebook-token`, 
    fields: ['emails', 'id', 'displayName', 'name', 'photos'] 
}, (accessToken, refreshToken, profile, cb) => { 
    console.log(profile, accessToken, refreshToken); 
    Account 
    .findOne({'facebook.id': profile.id}) 
    .then(account => { 
     if (account) { 
     cb(null, account); 
     } else { 
     // Sign up data to profile 
     } 
    }) 
    .catch(err => cb(err)); 
})); 

而且apropriate路线:

// Route to request Facebook token 
    // ================================================================== 
    router.get(`/${URL}/facebook`, passport.authenticate('facebook', {failWithError: true, scope: ['email', 'public_profile']})); 

    // Route to recieve Facebook data 
    // ================================================================== 
    router.get(`/${URL}/facebook-token`, passport.authenticate('facebook', {failWithError: true}), (req, res) => { 
    console.log('Facebook', req.session, req.user, req.account); 
    }); 
+0

请显示一些代码。 – mdcuesta

+0

更新的问题 – Strangerliquid

+0

看到答案..... – mdcuesta

回答

-1

哪些具体领域是你寻找?

电子邮件实际上是profile.emails这是一个数组,所以你必须使用索引来获取默认

profile.emails [0]

和名称实际上是另一个对象

profile.name.givenName

profile.name.familyName

profile.name.middleName

你可以使用UTIL打印配置对象以控制台查看的字段

进口UTIL从 'UTIL';

的console.log(util.inspect(配置文件,{showHidden:假的,深度:空}))

打印时,你也会找到Facebook的回应是

生JSON

_json