profileFields 参数遵循便携式联系人约定。这意味着您将要使用“电子邮件”而不是“电子邮件”。至于“about_me”字段,它似乎没有完全支持OpenSocial协议。这意味着如果您想对这两个配置文件元素都使用“profileFields”参数,那么您就不走运了。以下代码片段取自 master 分支,说明了这一限制:
Strategy.prototype._convertProfileFields = function(profileFields) {
var map = {
'id': 'id',
'username': 'username',
'displayName': 'name',
'name': ['last_name', 'first_name', 'middle_name'],
'gender': 'gender',
'profileUrl': 'link',
'emails': 'email',
'photos': 'picture'
};
...
此映射中列出的字段是目前唯一支持的字段。
幸运的是,一切都没有丢失。如果您选择不使用 profileFields 参数,那么奇怪的是,您将通过名为“bio”的属性向您发送您感兴趣的“about_me”内容。以下是您如何访问它:
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: FACEBOOK_CALLBACK_URL
},
function(accessToken, refreshToken, profile, done) {
console.log("bio: " + profile._json.bio);
}));
不幸的是,这并没有为您提供您感兴趣的其他数据。我猜在您的情况下,您可能正在考虑在 passport-facebook 回调期间收集支持的约定字段,然后在后续电话中获取扩展的配置文件字段直接使用facebook api。要么这样做,要么戳护照-facebook 维护人员以扩展他们的现场支持。