如何在currentUser对象中添加额外数据?

时间:2016-04-02 15:32:35

标签: meteor

我正在尝试为Meteor中的currentUser对象添加不在配置文件中的额外信息。我认为这是可能的,技术应该在meteor/alanning:roles

的某个地方

e.g。如果我在organizations中有一个users对象,例如

{ 
  _id: ...
  profile: { ... }
  roles: [ ... ]
  organizations: [ ... ]
}

我想在我做的时候看到它

{{ currentUser }}

2 个答案:

答案 0 :(得分:1)

要将orgId推送到用户对象中的organizations数组,例如:

Meteor.users.update(_id,{$push: {organizations: orgId}});

正如@Blaze Sahlzen所说,你需要发布这个字段:

Meteor.publish('orgUsers',function(orgId){
  return Meteor.users.find({organization: orgId},{fields: {organization: 1, profile: 1}});
});

答案 1 :(得分:0)

基本上currentUser是meteor中的全局帮助器,它调用返回Meteor.user()

来自流星回购

Package.blaze.Blaze.Template.registerHelper('currentUser', function () {
    return Meteor.user();
  });

https://github.com/meteor/meteor/blob/2ccb7467c9bb5889a3c36739d2d8b59a0656961c/packages/accounts-base/accounts_client.js#L421

Meteor.user()函数返回以下数据

user() {
    var userId = this.userId();
    return userId ? this.users.findOne(userId) : null;
  }

https://github.com/meteor/meteor/blob/dc3cd6eb92f2bdd1bb44000cdd6abd1e5d0285b1/packages/accounts-base/accounts_common.js#L52

回到你的问题,如果你想向currentUser添加额外的字段,只需将数据发布到客户端。

如果您希望默认将该字段发布给用户

Meteor.publish(null, function(argument){
  if(this.userId){
    return Members.findOne({userIds: this.userId}, { fields: { organizations: 1,... } });
  }
  this.ready()
});