我正在使用Accounts.createUser
向数据库中添加新用户,但问题是,并非所有属性都已添加。
以下是添加新用户的代码:
import {Accounts} from 'meteor/accounts-base';
Template.addingUser.events({
'submit #addUser': function (e, t) {
e.preventDefault();
Session.set('name', t.find('#name').value);
Session.set('email', t.find('#email').value);
Session.set('telephoneOffice', t.find('#telephoneOffice').value);
Session.set('telephoneHouse', t.find('#telephoneHouse').value);
Session.set('salary', t.find('#salary').value);
let userId = Accounts.createUser({
username: Session.get('name'),
password: "123456",
email: Session.get('email'),
telephoneOffice: Session.get('telephoneOffice'),
telephoneHouse: Session.get('telephoneHouse'),
employeeSalary: Session.get('salary'),
annualLeave: 14
}, function (err) {
if (err)
console.log(err);
else
console.log('It worked...');
});
Accounts.sendEnrollmentEmail(userId);
}
});
仅添加姓名,电子邮件和密码。
如何包含其他信息,例如telephoneOffice
?
答案 0 :(得分:2)
您需要在profile
对象中传递额外数据。
Accounts.createUser({
username: Session.get('name'),
password: "123456",
email: Session.get('email'),
profile: {
telephoneOffice: Session.get('telephoneOffice'),
telephoneHouse: Session.get('telephoneHouse'),
employeeSalary: Session.get('salary'),
annualLeave: 14
}
...
答案 1 :(得分:1)
Accounts.createUser
不接受用户名,电子邮件,密码和个人资料之外的自定义参数。传递自定义用户信息的默认功能是将telephoneOffice
这些字段作为profile
对象的一部分传递,该对象将复制到插入用户集合的文档中的user.profile
。 / p>
例如:
let userId = Accounts.createUser({
username: Session.get('name'),
password: "123456",
email: Session.get('email'),
profile: {
telephoneOffice: Session.get('telephoneOffice'),
telephoneHouse: Session.get('telephoneHouse'),
employeeSalary: Session.get('salary'),
annualLeave: 14
}
});
请注意,user.profile
字段为by default modifiable by users。因此遗产就在那里,但Meteor实际上建议避免将其用于存储。
如果您希望这些字段位于user
而不是user.profile
,您可以执行的操作是如上所述在profile
对象上传递自定义参数,然后覆盖默认值使用Accounts.onCreateUser的行为。像这样:
Accounts.onCreateUser(function(options, user) {
if (options.profile)
_.extend(user, options.profile);
return user;
});
在此处查看更多信息:https://guide.meteor.com/accounts.html#custom-user-data