我正在尝试获取经过身份验证的Facebook用户的个人资料图片,以便在Meteor应用程序中使用。我试过以下
Meteor.publish("facebook_avatar_url", function() {
return Meteor.users.find({_id: this.userId}, {fields: {
'services.facebook.id': 1,
'services.facebook.name': 1,
'services.facebook.gender': 1,
'services.facebook.picture': 1,
'services.facebook.picture.data': 1,
'services.facebook.picture.data.url': 1
}});
});
它只返回id,name和gender。这似乎是我想要的,以及推荐的解决方案。唯一的问题是没有关于用户图片的数据被返回。
我尝试将以下内容添加到server / server.js,根据其他帖子的建议,但它a)似乎不是推荐的方法,而b)似乎没有做任何事情。所以,它似乎是一个死胡同,但有人似乎认为它可以用于获取配置文件图片加载。
var getFbPicture;
Accounts.loginServiceConfiguration.remove({
service: "facebook"
});
Accounts.onCreateUser(function(options, user) {
if (options.profile) {
options.profile.picture = getFbPicture(user.services.facebook.accessToken);
user.profile = options.profile;
}
return user;
});
getFbPicture = function(accessToken) {
var result;
result = Meteor.http.get("https://graph.facebook.com/me", {
params: {
access_token: accessToken,
fields: 'picture'
}
});
if (result.error) {
throw result.error;
}
return result.data.picture.data.url;
};
所以,我有点不确定在这一点上要走哪条路。这是否需要在Facebook Graph API上设置权限?或者在Facebook应用程序上?我是否在发布功能中出现了错误的语法?我是否需要重新访问onCreateUser函数?
答案 0 :(得分:36)
使用此功能,您不需要访问令牌或任何特殊内容来获取他们的profile picture,只需要他们的Facebook用户ID。
Accounts.onCreateUser(function(options, user) {
if (options.profile) {
options.profile.picture = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
user.profile = options.profile;
}
return user;
});
答案 1 :(得分:3)
如果你想获得Facebook的照片
Accounts.onCreateUser(function(options, user) {
if (typeof(user.services.facebook) != "undefined") {
user.services.facebook.picture = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
}
return user;
});
你可以添加这个助手功能
UI.registerHelper("getImageUser", function (userId) {
var user= Meteor.users.findOne(userId);
if (user.services)
{
if (user.services.facebook)
return user.services.facebook.picture;
if (user.services.twitter)
return user.services.twitter.profile_image_url;
if (user.services.google)
return user.services.google.picture;
}
else
{
return "images/withOutPhoto.png";
}
});
你的HTML中的
<img src="{{getImageUser this._id}}" alt="...">