ome*_*arj 3 facebook-fql node.js passport-facebook
我登录用户时试图从Facebook获取的一些配置文件字段不会通过.
我在节点中使用passportjs.这是Facebook的策略:
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: FACEBOOK_CALLBACK_URL,
profileFields: ['id', 'displayName', 'link', 'about_me', 'photos', 'email']
},
routes.handleLogin
));
Run Code Online (Sandbox Code Playgroud)
正在使用:
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['user_about_me', 'email'] }));
Run Code Online (Sandbox Code Playgroud)
结果是"链接","about_me"和"电子邮件"不会被其他字段拉动.
小智 6
profileFields参数遵循Portable Contacts约定.这意味着您需要使用"电子邮件"而不是"电子邮件".对于"about_me"字段,看起来好像passport-facebook 完全支持OpenSocial协议.如果您想对这两个配置文件元素使用"profileFields"参数,这意味着您运气不好.以下代码片段取自主分支,说明了此限制:
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'
};
...
Run Code Online (Sandbox Code Playgroud)
此映射中列出的字段是目前唯一支持的字段.
幸运的是,一切都没有丢失.如果您选择不使用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);
}));
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有给你感兴趣的其他数据.我猜你在你的情况下你可能正在寻找在passport-facebook回调期间收集支持的约定字段,然后在后续调用中获取扩展的配置文件字段直接使用facebook api.无论是那个还是戳护照-facebook维护者来扩展他们的现场支持.
| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |