Meteor:在createAccount上添加字段

时间:2013-12-13 22:31:50

标签: javascript mongodb meteor

我正在尝试使用Meteor Roles包:https://github.com/alanning/meteor-roles 显然在用户模型中创建一个新字段。

创建用户没有问题,但我没有创建我想要定义的'roles'字段。我也可以在其中添加“个人资料”和细节等内容。但由于某种原因,我不能成为一个角色领域。这是我的表格:

Template.signup.events({
 'submit #signup-form' : function(e, t) {
   e.preventDefault();
   var roles = ['admin'],
       email = t.find('#email').value,
       password = t.find('#password').value;

   Accounts.createUser({email: email, password : password, roles: roles}, function(err){
       if (err) {
         alert("User Not Added")
       } else {
         console.log("User Added.")
       }

   });

 }
});

最终我需要将其发布到客户端,但是现在我只想在MongoDb中显示该字段,但事实并非如此。

3件事:

  1. 我觉得上面的代码应该可行,但我显然缺少一些东西
  2. 在包文档中,它提到了Roles.addUsersToRoles这个我 试过但没有运气
  3. 或者我是否需要在创建记录后更新记录?
  4. 我确实进入了数据库并手动添加了字段和相关的字符串来更新它(使用$ set)并且它有效。但是从形式本身来看,没有运气。

    任何指针都会非常感激。谢谢。

2 个答案:

答案 0 :(得分:4)

Accounts.createUser函数只允许您通过profile选项添加任意用户属性,这是他们最终存储在mongo中的位置。这就是为什么Meteor忽略了roles: roles电话的Accounts.createUser部分。

meteor-roles软件包确实存储了直接在users集合中分配给用户的角色列表,但这几乎只是一个实现细节,您可能最好坚持{{{ 1}}用于将用户添加到角色:

meteor-roles

传递给Roles.addUsersToRoles(<userId>,[<list of roles>])的{​​{1}}是userId在服务器上调用时返回的值,这可能是您想要这样做的地方,因为这样会感觉更安全。< / p>

答案 1 :(得分:1)

Accounts.createUser函数仅将usernameemailpasswordprofile作为用户对象的参数。 See the documentation here.因此,要向新用户对象添加另一个字段,您需要在第二步中添加它:

var uid = Accounts.createUser({email: email, password: password});
Meteor.users.update(uid, {$set: {roles: roles}});