2015-03-15 6 views
0

В настоящее время, когда удаляется автоматическая публикация, работает только {{currentUser.profile.name}}. Я пытаюсь получить {{currentUser.profile.first_name}} и аватар из Facebook, но так и не смог. Вот мой код ...Получение Facebook Аватарка в Метеор при удалении Autopublish

На стороне сервера:

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}} должен работать, но это не так.

ответ

3

Как Ричард говорит, когда создается пользователь, вы можете скопировать документ услуги к профилю doc.

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

Первый раздел о получении пользовательской информации был отличным! Тем не менее, мне все еще не удалось заставить аватару Facebook работать. Что я должен использовать для фактического отображения аватара? {{currentUser.profile.userPicHelper}}? – Viji123

+0

Я добавил то, что я использую в шаблоне, чтобы отобразить изображение. – arnonate

-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; 
}); 
+0

{{currentUser.services.facebook.first_name}}, похоже, не работает. Должно ли это работать из коробки или что-то не так? – Viji123