2015-07-24 3 views
1

У меня есть базовый проект в Метеоре создан из Метеора-администратор заглушки: (https://github.com/yogiben/meteor-admin)Метеор и счет-база - как получить данные для разных пользователей

мне нужно отображать аватар для всех пользователей, а не только текущего. Для отображения аватара пользователя мне нужен его адрес электронной почты. (Я использую утилиты: Avatar https://atmospherejs.com/utilities/avatar)

Вопрос: какие корректировки проекта я должен сделать, чтобы иметь возможность получить доступ к данным других пользователей?

Возможно, это связано с публикацией пользователей.

На данный момент у меня есть:

{{> avatar user=getAuthor shape="circle" size="small"}}   

getAuthor: -> 
    console.log 'Owner:' 
    console.log @owner 
    user = Meteor.users.findOne(@owner) 
    console.log user 
    user 

Это правильно печатает Owner: @owner (ID) для всех пользователей, но user объект заполняется только для текущего пользователя.

У меня также есть этот код на стороне сервера:

Meteor.publishComposite 'user', -> 
    find: -> 
    Meteor.users.find _id: @userId 
    children: [ 
    find: (user) -> 
     _id = user.profile?.picture or null 
     ProfilePictures.find _id: _id 
    ] 

(дети/ProfilePicture являются irrelevent)

Я думаю account-base библиотека превращается публикации прочь или что-то? Спасибо за помощь!

Вопрос с бонусом: Хотелось бы получить доступ к некоторым сведениям о пользователе (адрес электронной почты).

ответ

3

Если удалить пакет autopublish, необходимо явно указать, что сервер отправляет на клиент. Вы можете сделать это через Meteor.publish и Meteor.subscribe.

Например, публиковать адреса электронной почты всех пользователей, вы можете сделать:

if (Meteor.isServer) { 
    Meteor.publish('emailAddresses', function() { 
     return Meteor.users.find({}, { 
      fields: { 
       'email': 1 
      } 
     }); 
    }); 
} 

После этого, вам необходимо подписаться на публикацию на клиенте:

if (Meteor.isClient) { 
    Meteor.subscribe("emailAddresses"); 
} 

Подробнее о Meteor's publish and subscribe functionality.

0

Имея коллекцию: Meteor.users

Чтобы получить доступ к другим данным пользователей просто опубликовать его на стороне сервера:

Meteor.publish 'userData', -> 
    Meteor.users.find() 

На стороне клиента вы не должны использовать любые userData ссылки. Просто доступ к нему:

Meteor.users.findOne(someId) 

Чтобы разрешить доступ только к определенной информации, опубликовать его с fields параметра:

Meteor.publish 'userData', -> 
    Meteor.users.find({},{fields: {'_id', 'emails', 'username'}}) 
Смежные вопросы