Accounts.onCreateUser 在创建新用户时添加额外的属性,好的做法?
Posted
技术标签:
【中文标题】Accounts.onCreateUser 在创建新用户时添加额外的属性,好的做法?【英文标题】:Accounts.onCreateUser adding extra attributes while creating new users, good practices? 【发布时间】:2015-07-15 00:30:19 【问题描述】:我正在使用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.. *BUT.. 在此之后,它不再保存 profile 在用户对象下。然而,这使它工作:
Accounts.onCreateUser(function(options, user)
if (options.secretAttribute)
user.secretAttribute = options.secretAttribute;
if (options.profile)
user.profile = options.profile;
return user;
);
那我想从你们那里得到什么?
-
我想知道为什么 onCreateUser 在我的情况下会丢失个人资料(在上述修复之前)?
我的方法是好的做法吗?
是否有更好的解决方案在创建用户对象时为它们添加额外属性?
ps:我认为我不想将所有额外字段保存在配置文件下的原因很明显;)
【问题讨论】:
【参考方案1】:好吧,这并不难。它在文档中是这样的:“默认的创建用户函数只是将 options.profile 复制到新的用户文档中。调用 onCreateUser 会覆盖默认钩子。” - Accounts.onCreateUser
【讨论】:
是否有系统的方式来调用原始实现?像“超级”【参考方案2】:试试这个:
Accounts.onCreateUser((options, user) => (Object.assign(, user, options)));
【讨论】:
你能解释一下为什么这是一个很好的解决问题的方法而不是仅仅提供代码吗?【参考方案3】:我发现这个问题最好的是:
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
【讨论】:
以上是关于Accounts.onCreateUser 在创建新用户时添加额外的属性,好的做法?的主要内容,如果未能解决你的问题,请参考以下文章