Meteor发布其他用户信息登录/注销

时间:2013-04-09 12:14:37

标签: coffeescript meteor meteorite

我正在尝试根据用户的角色有选择地发布用户数据。我希望发布电子邮件地址和用户名。如果用户是管理员,他们应该能够看到整个用户个人资料。

在服务器(CS)上:

Meteor.publish "allUsers", ->
    if Roles.userIsInRole @userId, 'admin' then data = profile: 1
    else data = 'profile.name': 1
    data['emails.address'] = 1
    Meteor.users.find {}, fields: data

在客户端(CS)上:

Meteor.subscribe("allUsers")

这在大多数情况下都很有效。当用户注销,然后再次登录时,订阅和

会破坏某些内容
Meteor.user().profile

什么都不返回。刷新页面,然后再次填写配置文件字段。为了尝试解决问题,我将服务器返回语句更改为:

[
    Meteor.users.find {}, fields: data
    Meteor.users.find @userId
]

这没有做任何事。这是Meteor的错误还是我从根本上误解了登录/注销?

更新

我读了一下,似乎Meteor将在同一个集合中随机选择多个订阅/发布的数据。考虑到这一点,我将返回查询更改为:

Meteor.users.find _id: $ne: @userId, fields: data

其他用户的数据现在尚未发布! (控制台中的Meteor.users.find()。count()返回1.)

1 个答案:

答案 0 :(得分:0)

我相信你的原始退货声明没问题。但是,当Roles.userIsInRole@userId时,我会看一下null函数会发生什么。也许有一个错误导致Publish功能崩溃。

我不是Coffeescripter,但如果这是问题所在,那么我认为将此添加到发布功能的顶部可以解决您的问题:

if not @userId return