我正在尝试使用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件事:
Roles.addUsersToRoles
这个我
试过但没有运气我确实进入了数据库并手动添加了字段和相关的字符串来更新它(使用$ set)并且它有效。但是从形式本身来看,没有运气。
任何指针都会非常感激。谢谢。
答案 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
函数仅将username
,email
,password
和profile
作为用户对象的参数。 See the documentation here.因此,要向新用户对象添加另一个字段,您需要在第二步中添加它:
var uid = Accounts.createUser({email: email, password: password});
Meteor.users.update(uid, {$set: {roles: roles}});