我遇到了将所有用户列在users集合中的问题。当我进入列表页面时,仅显示当前登录用户的详细信息。但是一旦页面刷新并且处于罚款状态,所有用户都会被列出。
在服务器端,我有以下发布代码
Meteor.publish("userList", function() {
var user = Meteor.users.findOne({
_id: this.userId
});
if (Roles.userIsInRole(user, ["admin"])) {
return Meteor.users.find({}, {
fields: {
profile_name: 1,
emails: 1,
roles: 1,
contact_info: 1
}
});
}
this.stop();
return;
});
在客户端,
Meteor.subscribe('userList');
在Template js文件中,我进行以下调用,
Meteor.users.find();
请帮我解决这个问题。我在这里缺少什么?
答案 0 :(得分:5)
这听起来像订阅的竞争条件(它在用户登录之前运行)。我建议您将订阅置于autorun:
之内Tracker.autorun(function() {
if (Meteor.user()) {
Meteor.subscribe('userList');
}
});
这具有在用户登录之前不开始订阅的额外好处(节省资源)。
顺便说一句,我想不出你需要this.stop()
和发布功能结束的原因。