删除自动发布时在 Meteor 中获取 Facebook 头像
Getting Facebook Avatar in Meteor when Autopublish is removed
目前,当自动发布被删除时,只有{{currentUser.profile.name}} works.I正在尝试从 Facebook 获取 {{currentUser.profile.first_name}} 和头像,但还没有能够这样做。这是我的代码...
在服务器端:
Meteor.publish('userData', function() {
if(!this.userId) return null;
return Meteor.users.find(this.userId, {fields: {
'services.facebook': 1
}});
});
在铁路由器上:
Router.configure({
waitOn: function() {
return Meteor.subscribe('userData');
}
});
据我了解,我看到 Meteor 正在发布所有用户数据,然后通过 Iron Router 订阅它。我不明白的是为什么这不起作用——我认为 {{currentUser.profile.first_name}} 应该起作用但不是。
我相信您正在尝试访问 services
子文档中的 first_name
字段。应该是{{currentUser.services.facebook.first_name}}
如果要将first_name
转为profile
子文档,可以有如下事件处理程序:
Accounts.onCreateUser(function(options, user) {
// ... some checks here to detect Facebook login
user.profile.firstName = user.services.facebook.first_name;
user.profile.lastName = user.services.facebook.last_name;
});
就像理查德建议的那样,当创建用户时,您可以将服务文档复制到配置文件文档中。
Accounts.onCreateUser(function(options, user) {
// We still want the default hook's 'profile' behavior.
if (options.profile) {
user.profile = options.profile;
user.profile.memberSince = new Date();
// Copy data from Facebook to user object
user.profile.facebookId = user.services.facebook.id;
user.profile.firstName = user.services.facebook.first_name;
user.profile.email = user.services.facebook.email;
user.profile.link = user.services.facebook.link;
}
return user;
});
获得他们的名字和 Facebook ID 的出版物将如下所示...
/* ============== Single User Data =============== */
Meteor.publish('singleUser', function(id) {
check(id, String);
return Meteor.users.find(id,
{fields: {'profile.facebookId': 1, 'profile.name': 1, 'profile.firstName': 1, 'profile.link': 1}});
});
您可以使用模板辅助函数访问用户的 Facebook 头像...
Template.profileView.helpers({
userPicHelper: function() {
if (this.profile) {
var id = this.profile.facebookId;
var img = 'http://graph.facebook.com/' + id + '/picture?type=square&height=160&width=160';
return img;
}
}
});
然后在您的模板中,您可以使用以下助手(前提是您将其包装在包含用户数据的块中):
<img src="{{userPicHelper}}" alt="" />
目前,当自动发布被删除时,只有{{currentUser.profile.name}} works.I正在尝试从 Facebook 获取 {{currentUser.profile.first_name}} 和头像,但还没有能够这样做。这是我的代码...
在服务器端:
Meteor.publish('userData', function() {
if(!this.userId) return null;
return Meteor.users.find(this.userId, {fields: {
'services.facebook': 1
}});
});
在铁路由器上:
Router.configure({
waitOn: function() {
return Meteor.subscribe('userData');
}
});
据我了解,我看到 Meteor 正在发布所有用户数据,然后通过 Iron Router 订阅它。我不明白的是为什么这不起作用——我认为 {{currentUser.profile.first_name}} 应该起作用但不是。
我相信您正在尝试访问 services
子文档中的 first_name
字段。应该是{{currentUser.services.facebook.first_name}}
如果要将first_name
转为profile
子文档,可以有如下事件处理程序:
Accounts.onCreateUser(function(options, user) {
// ... some checks here to detect Facebook login
user.profile.firstName = user.services.facebook.first_name;
user.profile.lastName = user.services.facebook.last_name;
});
就像理查德建议的那样,当创建用户时,您可以将服务文档复制到配置文件文档中。
Accounts.onCreateUser(function(options, user) {
// We still want the default hook's 'profile' behavior.
if (options.profile) {
user.profile = options.profile;
user.profile.memberSince = new Date();
// Copy data from Facebook to user object
user.profile.facebookId = user.services.facebook.id;
user.profile.firstName = user.services.facebook.first_name;
user.profile.email = user.services.facebook.email;
user.profile.link = user.services.facebook.link;
}
return user;
});
获得他们的名字和 Facebook ID 的出版物将如下所示...
/* ============== Single User Data =============== */
Meteor.publish('singleUser', function(id) {
check(id, String);
return Meteor.users.find(id,
{fields: {'profile.facebookId': 1, 'profile.name': 1, 'profile.firstName': 1, 'profile.link': 1}});
});
您可以使用模板辅助函数访问用户的 Facebook 头像...
Template.profileView.helpers({
userPicHelper: function() {
if (this.profile) {
var id = this.profile.facebookId;
var img = 'http://graph.facebook.com/' + id + '/picture?type=square&height=160&width=160';
return img;
}
}
});
然后在您的模板中,您可以使用以下助手(前提是您将其包装在包含用户数据的块中):
<img src="{{userPicHelper}}" alt="" />