2013-12-13 24 views
1

我试图使用流星角色包:https://github.com/alanning/meteor-roles 明显地在用户模型中创建一个新字段。流星:在createAccount上添加字段

用户创建没有问题,但我试图定义的'角色'字段没有创建。我可以在其中添加“个人资料”和详细信息。但由于某种原因,我无法成为角色领域。这是我的形式:

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. 或者创建后是否需要更新记录?

我确实进入了数据库,并手动添加了字段和关联的字符串以更新它(使用$ set)并且它工作正常。但是从形式本身来看,没有运气。

任何指针将不胜感激。谢谢。

回答

4

Accounts.createUser功能只允许您通过profile选项,这是他们最后添加任意用户属性存放在mongo中。这就是流星忽略Accounts.createUser呼叫的roles: roles部分的原因。

确实,meteor-roles包存储的是直接在用户集合中分配给用户的角色列表,但这几乎只是一个实现细节,您可能最好坚持使用meteor-roles为添加用户提供的API一个角色:

Roles.addUsersToRoles(<userId>,[<list of roles>])

userId传递给Roles.addUsersToRolesAccounts.createUser返回的值时,它要进行这样的,感觉这样更安全这可能是在服务器上调用。

+0

很好说。谢谢。对于任何关注此事的人,请勿将userId用作Roles.addUserToRoles上的变量名。 go-oleg不是在说,我只是做了,因为它有道理。然而,这是保留在某个地方,即使我已经设置了正确的一切,直到我改变了名称,它不能正常工作, – Colton45

+0

@ go-oleg是点亮的。 github repo中的示例应用程序显示了这一行为:https://github.com/alanning/meteor-roles/blob/master/examples/mini-pages/server/server.js#L57-L66 – alanning

1

Accounts.createUser功能只usernameemailpasswordprofile作为PARAMS用户对象。 See the documentation here.所以,另一个字段添加到一个新的用户对象,您需要将其添加在第二个步骤:

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

Hubert OG你是一个成年人。我到处看到你的答案,谢谢。如果他们愿意,我会使用这个信息来允许用户添加他们的个人资料。 – Colton45