我正在使用Accounts.createUser()创建新用户,如果您没有做任何花哨的事情,它会正常工作。但我想向新用户添加一些未在文档中列出的其他字段。这是我的代码:
var options = {
username: "funnyUserNameHere",
email: "username@liamg.com",
password: "drowssap",
profile: {
name: "Real Name"
},
secretAttribute: "secretString"
};
var userId = Accounts.createUser(options);
在这个例子中,我已将secretAttribute添加到我的选项对象中。因为这没有记录,所以它不公平,它不会在用户对象下添加我的属性。
所以我用谷歌搜索并发现这样的事情可能有用:
Accounts.onCreateUser(function(options, user) {
if (options.secretAttribute)
user.secretAttribute = options.secretAttribute;
return user;
});
是的!这是有效的,但总有BUTT .. *但是......在这之后它不再在用户对象下保存 profile 了。然而,这使它工作:
Accounts.onCreateUser(function(options, user) {
if (options.secretAttribute)
user.secretAttribute = options.secretAttribute;
if (options.profile)
user.profile = options.profile;
return user;
});
那么我想要你们呢?
ps:我认为很明显为什么我不想在个人资料下保存所有额外的字段;)
答案 0 :(得分:5)
嗯,它不是那么难......这里有文档:"默认的创建用户功能只是将options.profile复制到新的用户文档中。调用onCreateUser会覆盖默认挂钩。" - Accounts.onCreateUser
答案 1 :(得分:0)
试试这个:
Accounts.onCreateUser((options, user) => (Object.assign({}, user, options)));
答案 2 :(得分:0)
我发现这个问题的最好方法是:
Accounts.onCreateUser(function(options, user) {
// Use provided profile in options, or create an empty object
user.profile = options.profile || {};
// Assigns first and last names to the newly created user object
user.profile.firstName = options.firstName;
user.profile.lastName = options.lastName;
// Returns the user object
return user;`enter code here`
});
https://medium.com/all-about-meteorjs/extending-meteor-users-300a6cb8e17f