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

雨燕双飞 提交于 2019-12-11 10:43:49

问题


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).


回答1:


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.




回答2:


Having collection: Meteor.users

To access other users data just publish it on the server-side:

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

On client side you don't have to use any userData reference. Just access it:

Meteor.users.findOne(someId)

To allow access to only specific information, publish it with fields parameter:

Meteor.publish 'userData', ->
    Meteor.users.find({},{fields: {'_id', 'emails', 'username'}})


来源:https://stackoverflow.com/questions/31607876/meteor-account-base-how-to-get-data-for-different-users

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!