Извините за мой английский. Я использую пакет useraccounts:bootstrap для входа, регистрации и так далее. Как я могу добавить произвольные данные в коллекцию Meteor.users после регистрации. Например, я хочу, чтобы у пользователей после регистрации было поле «статус» со значением «ложь» или поле «время» с временем регистрации. Спасибо.
Как добавить настраиваемые поля в коллекцию Meteor.users?
Ответы (3)
Если пользователю необходимо предоставить данные, вам потребуется настроить пользовательский интерфейс и добавить нужные поля.
На сервере вы можете прикрепить обратный вызов onCreateUser()
для установки данных при создании нового пользователя.
import _ from 'lodash';
Accounts.onCreateUser((options, user) => {
// add your extra fields here; don't forget to validate the options, if needed
_.extend(user, {
status: false,
createdAt: new Date()
});
return user;
});
аргумент options
содержит данные со стороны клиента.
useraccounts:bootstrap позволяет настраивать шаблоны панели регистрации, добавляя видимые, явные и редактируемые поля в регистрационную форму, как описано в документации GitHub по useraccounts/core (ищите AccountTemplates.addFields). метод).
Однако useraccounts:bootstrap зависит от accounts-password, поэтому вы можете использовать его метод Accounts.createUser, просто передав дополнительные поля в объект передается в метод Accounts.createUser. Ваш метод createUser будет выглядеть так:
Accounts.createUser({
username:'newuser',
password:'pass1234',
profile:{ //no sensitive data here, this can be modified by the user
},
registrationTime: new Date, //date & time of registration
status: false
});
Эта проблема обсуждалась на форумах Meteor:forums.meteor.com.
Более элегантный способ решения вашей проблемы – вызов серверной функции Accounts.onCreateUser каждый раз при создании учетной записи пользователя. Эта функция назначит регистрациюTime и статус вновь созданной учетной записи. Проверьте это в документации Meteor: Accounts.onCreateUser docs.meteor.com
Вот как я это делаю; соответствует стилю документации метеора и не требует lodash:
import { Accounts } from 'meteor/accounts-base';
Accounts.onCreateUser((options, user) => {
const userToCreate = Object.assign({
status: false,
createdAt: new Date(),
}, user);
if (options.profile) userToCreate.profile = options.profile;
return userToCreate;
});