我有一个集合,其中包含一组用户电子邮件。我需要在发布功能中访问登录用户的电子邮件地址。以下作品:
Meteor.publish("groups", function() {
return Groups.find({emails: "hand_coded@email.com"});
});
显然没用。这些都不起作用:
Meteor.user().emails[0].address
this.user.emails[0].address
this.userId.emails[0].address
这里访问用户电子邮件地址的正确方法是什么?
答案 0 :(得分:5)
您是否将subscribe
函数置于被动上下文中?当用户尚未设置时,可以首先调用发布函数,在这种情况下this.user
将是null
。您应该在发布方法中检查这一点。另外,根据the documentation,只有this.userId
参数可用,因此您需要自己获取用户对象:
Meteor.publish('groups', function() {
if(!this.userId) return [];
var user = Meteor.users.findOne(this.userId);
... /* use user.emails[0].address to search for and return the right groups */
});
此外,将您的订阅功能包装在被动反应中:
Deps.autorun(function() {
Meteor.subscribe('groups');
});