在Meteor发布功能中获取用户的电子邮件地址

时间:2014-03-10 20:28:21

标签: javascript mongodb meteor

我有一个集合,其中包含一组用户电子邮件。我需要在发布功能中访问登录用户的电子邮件地址。以下作品:

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

这里访问用户电子邮件地址的正确方法是什么?

1 个答案:

答案 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');
});