删除自动发布时,在Meteor中获取Facebook头像

时间:2015-03-15 02:18:31

标签: javascript facebook meteor iron-router user-profile

目前,当删除自动发布时,只有{{currentUser.profile.name}}正常工作。我正试图从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正在发布所有userData,然后通过Iron Router订阅它。我不明白为什么这不起作用 - 我认为{{currentUser.profile.first_name}}应该有效但不是。

2 个答案:

答案 0 :(得分:3)

与Richard建议一样,创建用户后,您可以将服务文档复制到配置文件文档。

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="" />

答案 1 :(得分:-1)

我相信您正在尝试从first_name子文档中访问services字段。它应该是{{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;
});