Подтвердить что ты не робот

Как я могу создать серверную часть пользователей в Meteor?

В новой ветке Meteor auth как я могу создать серверную сторону пользователей?

Я вижу, как создать их на стороне клиента с вызовом

[Client] Meteor.createUser(options, extra, callback)

Но предположим, что я хочу создать запись коллекции пользователей Meteor при запуске?

Например, учетная запись администратора при запуске/загрузке приложения?

Спасибо Steeve

4b9b3361

Ответ 1

Вероятно, сейчас это хорошо известный факт, но для того, чтобы это сделать - для этого используется новый API-интерфейс сервера на ветке auth. Из docs на auth:

"[Сервер] Meteor.createUser(опции, дополнительные) - создает пользователя и отправляет этому пользователю электронное письмо со ссылкой для выбора своего первоначального пароля и завершить регистрацию своих аккаунтов

параметры хэш, содержащий: адрес электронной почты (обязательно), имя пользователя (необязательно) extra: дополнительные поля для объекта пользователя (например, имя и т.д.)."

Обратите внимание, что API может быть изменен, поскольку он еще не находится на ведущей ветке.

Ответ 2

В более новых версиях использования метеоров

  Accounts.createUser({
                            username: username,
                            email : email,
                            password : password,
                            profile  : {
                                //publicly visible fields like firstname goes here
                            }

    });

note: хеш пароля генерируется автоматически

В более старых версиях использования метеоров:

1 - NB: У ВАС ЕСТЬ ТРЕБУЕМЫЕ ПАКЕТЫ УСТАНОВЛЕН?

  • mrt add accounts-base
  • mrt add accounts-password

В некоторых версиях метеорита вы не можете вызвать генератор паровых паролей SRP, как предложил Стиви, поэтому попробуйте следующее:

2 - do Meteor.users.insert()

например.

 var newUserId = 
 Meteor.users.insert({
         emails: ['[email protected]'],
         profile  : { fullname : 'peter' }
 });

note: у пользователя должно быть имя пользователя или адрес электронной почты. В этом примере я использовал электронную почту.

3 - Установите пароль для вновь созданной учетной записи.     

      Accounts.setPassword(newUserId, 'newPassword');
      

Ответ 3

Пока это было предложено в группе google meteor-core.

Meteor.users.insert({username: 'foo', emails: ['[email protected]'], name: 'baz', services:     {password: {srp: Meteor._srp.generateVerifier('password')}}});

Это работает. Я тестировал его во время загрузки/загрузки.

Я бы не считал это постоянным или долгосрочным ответом, потому что я считаю, что ветвь auth все еще находится в значительной степени, и я полагаю, что команда, стоящая за Meteor, предоставит для нее какую-то функциональность.

Итак, не зависеть от этого как долгосрочный ответ.

Steeve

Ответ 4

На данный момент, я считаю, вы не можете. Запуск

Meteor.call('createUser', {username: "foo", password: "bar"});

близок, но реализация createUser в passwords_server.js вызывает this.setUserId при успешном завершении, а setUserId не может быть вызвана на сервере, если мы не находимся в вызове метода, инициированного клиентом (поиск "Can 't вызвать setUserId по вызову метода инициированного сервером" в livedata_server.js.

Это похоже на то, что стоит поддержать. Возможно, последние три строки createUser, которые регистрируют пользователя в, должны управляться с помощью новой опции boolean login для метода? Затем вы можете использовать

Meteor.call('createUser', {username: "foo", password: "bar", login: false});

в исходном коде сервера.

Ответ 5

Я подтвердил, что следующий код в моем файле server/seeds.js работает с самой последней версией Meteor (Release 0.8.1.1)

if (Meteor.users.find().count() === 0) {
  seedUserId = Accounts.createUser({
    email: '[email protected]',
    password: '123456'
  });
}

Каталог (или папка) server означает, что я запускаю код на сервере. Имя файла seeds.js является полностью произвольным.

Официальная документация теперь описывает поведение для Accounts.createUser() при запуске на клиенте и при запуске на сервере.

Ответ 6

Создайте пользователя со стороны сервера

    // Server method
    Meteor.methods({
      register: function(data) {
       try {
         console.log("Register User");
         console.log(data);
         user = Accounts.createUser({
           username: data.email,
           email: data.email,
           password: data.password,
           profile: {
             name: data.email,
             createdOn: new Date(),
             IsInternal: 0
           }
         });
         return {
           "userId": user
         };
       } catch (e) {
         // IF ALREADY EXSIST THROW EXPECTION 403
         throw e;
       }
     }
    });
    // Client call method
    Meteor.call('register',{email: "[email protected]",password: "123456"}, function(error, result){
      if(result){
       console.log(result)
      }
      if(error){
       console.log(result)
      }
    });

Ответ 7

Рабочий пример coffeescript для версии 1.2.0.2 Meteor (серверная сторона):

userId = Accounts.createUser  
    username: 'user'
    email: '[email protected]'
    password: 'password'
    profile:
      name: 'user name' 
user = Meteor.users.findOne userId 

Я некоторое время боролся с этим API, получая исключение "Пользователь уже существует" в рабочем коде перед добавлением profile.name в options, а исключение исчезло.

ссылка: Accounts.createUser(опции, [обратный вызов])