如何避免Accounts.onCreateUser覆盖users.profile?

时间:2015-03-12 22:08:28

标签: meteor meteor-accounts

在客户端网站上我有一个extraSignupField - >名称。它存储在users.profile.name中。这是代码:

Meteor.startup(function() {
  Accounts.ui.config({
  passwordSignupFields: 'EMAIL_ONLY'
});

AccountsEntry.config({
  homeRoute: '/',
  dashboardRoute: '/dashboard',
  profileRoute: '/profile',
  language: 'de',
  showSignupCode: false,
  extraSignUpFields: [{
    field: "name",
    label: "Name",
    type: "text",
    required: true
  }]
 });
});

在我运行onCreateUser的服务器站点上,这会被触发,但它只设置那里提到的值。当onCreateUser到位时,不会创建users.profile条目。

这是服务器代码:

Meteor.startup(function() {
  AccountsEntry.config({
    signupCode: null
});

Accounts.onCreateUser(function (options, user) {
    user.username     = options.email;
    return user;
    });

});

我的目标是保留来自users.profile和用户名条目的数据。不幸的是,我在这一点上陷入困​​境。

非常感谢 迈克尔

1 个答案:

答案 0 :(得分:2)

当您编写自己的Accounts.onCreateUser时,它会覆盖默认值。在默认情况下,options.profile将复制到user.profile。您可以通过在您自己的函数版本中创建此副本来恢复默认行为。您可以在the docs中看到这一点。

Accounts.onCreateUser( function (options, user) {
    if (options.profile) user.profile = options.profile;
    user.username = options.email;
    return user;
}
相关问题