gpt4 book ai didi

node.js - nodejs 中的 passport-facebook - 配置文件字段

转载 作者:搜寻专家 更新时间:2023-10-31 23:33:15 25 4
gpt4 key购买 nike

我在登录用户时尝试从 Facebook 获取的一些个人资料字段没有通过。

我在 Node 中使用 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
));

用于:

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

结果是“链接”、“about_me”和“电子邮件”未被拉取,而其他字段被拉取。

最佳答案

profileFields 参数符合 Portable Contacts convention .这意味着您需要使用“电子邮件”而不是“电子邮件”。至于“about_me”字段,似乎 passport-facebook 不支持 OpenSocial协议(protocol)完全。这意味着如果您想对这两个配置文件元素都使用“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 进行后续调用。或者戳 passport-facebook 维护者以扩展他们的现场支持。

关于node.js - nodejs 中的 passport-facebook - 配置文件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com