2016-12-05 2 views
0

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

Проблема теперь в том, что если я вошел в систему с учетной записью «Alex», и я добавил «Leonard» в базу данных, Leonard будет добавлен успешно, и вошедший пользователь изменится с Alex на Leonard.

Как предотвратить это изменение?

UPDATE:

Вот мой код:

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('homeAddress', t.find('#homeAddress').value); 
     Session.set('pass', t.find('#pass').value); 


     Session.set('taxNo', t.find('#taxNo').value); 


     let userId = Accounts.createUser({ 
      username: Session.get('name'), 
      password: Session.get('pass'), 
      email: Session.get('email'), 
      profile: { 
      homeAddress: Session.get('homeAddress'), 
     } 

     }, function (err) { 
      if (err) 
       console.log(err); 
      else 
       console.log('It worked...'); 
     }); 
    } 
}); 

UPDATE 1,1

Я пытался использовать Accounts.onCreateUser функцию. Пользователь успешно добавлен, но после входа добавляется текущий зарегистрированный пользователь.

вот мой код:

Клиент:

var options = { 
      username: t.find('#name').value, 
      password: t.find('#pass').value, 
      email: t.find('#email').value, 
      profile: { 
       homeAddress: t.find('#homeAddress').value, 
      } 
     }; 
     Meteor.call('createUser', options); 

Сервер:

Meteor.methods({ 
    employeeAddition: function(options){ 
     Accounts.onCreateUser(function(options, user) { 
      if (options.profile) 
       user.profile = options.profile; 
     }); 
     var userId = Accounts.createUser(); 
    }, 
}); 

Как предотвратить текущего пользователя от входа после нового пользователя добавляется?

+0

Пожалуйста, покажите код, который вы используете для добавления нового пользователя. –

+0

@MichelFloyd Я обновил вопрос :) –

ответ

1

Вы задаете имя, адрес электронной почты, адрес homeAddress и переходите на сеанс. Если вы используете Session.get ('name') для управления зарегистрированным пользователем, это объясняет, почему обновленный зарегистрированный пользователь был обновлен.

Постарайтесь не устанавливать там значения для сеанса. Я не вижу смысла.

Надеюсь, что помогите.

+0

да, ваше право, я изменяю код сейчас, надеюсь, что он сработает, обновит вас через мгновение. Спасибо –

+0

код выглядит лучше и меньше, спасибо. проблема по-прежнему остается tho -_- –

1

Accounts.createUser автоматически регистрирует пользователя после регистрации успешно, и, похоже, нет параметров, предоставленных Meteor, чтобы отключить его. Так что вам нужно будет позвонить createdUser самостоятельно, чтобы предотвратить это:

Meteor.call('createUser', { 
    username: Session.get('name'), 
    password: Accounts._hashPassword(Session.get('pass')), 
    email: Session.get('email'), // you have to hash the password 
    profile: { 
    homeAddress: Session.get('homeAddress'), 
    }, 
}, function(err, re) { 
    // ... 
}) 
+0

Спасибо, я поддержал вас, это решение помогло не входить в новый пользователь, но текущий пользователь будет выведен из системы. -_- –

2

Это потому, что вы вызываете Accounts.createUser() на клиента вместо сервера.

От docs

На клиенте, эта функция входит в качестве вновь созданного пользователя на успешного завершения. На сервере возвращается вновь созданный идентификатор пользователя .

Вы должны добавить метод сервера, в котором вызвана Accounts.createuser()

+0

Я реализую решение сейчас, вернусь к вам в мгновение, спасибо :) –

0

Используя Accounts.onCreateUser решил это для меня

Client:

var options = { 
      username: t.find('#name').value, 
      password: t.find('#pass').value, 
      email: t.find('#email').value, 
      profile: { 
       homeAddress: t.find('#homeAddress').value, 

      } 
     }; 

     Meteor.call('employeeAddition', options); 

Затем я передал варианты метода, в котором Я вызвал Accounts.createUser и Accounts.onCreateUser. Как упоминается в их docs.

По умолчанию параметр профиля добавляется непосредственно в новый пользовательский документ. Чтобы отменить это поведение, используйте Accounts.onCreateUser.

Вот код:

Сервер:

Meteor.methods({ 
    employeeAddition: function(options){ 

     Accounts.createUser(options); 

     Accounts.onCreateUser(function(options, user) { 
      if (options.profile) 
       user.profile = options.profile; 
     }); 
    }, 
}); 
Смежные вопросы