无法使用Accounts.onCreateUser添加用户属性

时间:2013-05-17 09:19:56

标签: javascript meteor

我尝试向所有新创建的用户添加属性“权限”。但它不知何故不起作用。我使用此代码添加属性

 Accounts.onCreateUser(function(options, user) {
  user.permission = 'default';
  if (options.profile)
    user.profile = options.profile;
  return user;
});

但是当我在客户端检索用户对象时,我看不到属性

u = Meteor.users.findOne(Meteor.userId)
u.permission
>undefined

我做错了什么?

2 个答案:

答案 0 :(得分:9)

您正确创建它。问题是客户端没有看到这个值。取自documentation:

  

默认情况下,服务器会发布用户名,电子邮件和个人资料

因此您需要发布/订阅其他字段。

服务器:

Meteor.publish('userData', function() {
  if(!this.userId) return null;
  return Meteor.users.find(this.userId, {fields: {
    permission: 1,
  }});
});

客户端:

Deps.autorun(function(){
  Meteor.subscribe('userData');
});

答案 1 :(得分:1)

Meteor.users.findOne(Meteor.userId)应更改为Meteor.users.findOne(Meteor.userId())

另外,我不确定实际传输到客户端的用户对象上的哪些字段。您可能需要将user.permission = 'default'更改为options.profile.permission = 'default',以便Accounts.onCreateUser看起来像这样:

Accounts.onCreateUser(function(options, user) {
    if(!options.profile){
       options.profile = {}
    }
    options.profile.permission = 'default'
    if (options.profile)
        user.profile = options.profile;
    return user;
});