如何为用户集合添加额外的属性?

时间:2016-11-29 03:55:38

标签: meteor meteor-accounts

我正在使用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

2 个答案:

答案 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