Search code examples
meteoruser-accounts

Meteor & account-base - how to get data for different users


I have basic project in Meteor created from Meteor-admin stub: (https://github.com/yogiben/meteor-admin)

I need to display avatars for all users, not only current one. For displaying user's avatar I need his email address. (I am using utilities:avatar https://atmospherejs.com/utilities/avatar)

Question: what adjustments to project should I make to be able to access other users' data?

It probably has something to do with publishing users.

At the moment I have:

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

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

This correctly prints Owner: @owner (id) for all users, but user object is only populated for current user.

I also have this code in server-side:

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

(children / ProfilePicture are irrelevent)

I think account-base library turns publishing off or something? Thanks for help!

Bonus question: I would like to access only some info about an user (email address).


Solution

  • If you remove the package autopublish, you need to specify explicitly what the server sends to the client. You can do this via Meteor.publish and Meteor.subscribe.

    For instance, to publish the email addresses of all users you could do:

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

    After that, you need to subscribe to the publication on the client:

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

    Read more about Meteor's publish and subscribe functionality.