После создания пользователя на метеоре сеанс меняется на нового пользователя.

Я создаю свою пользовательскую страницу «Создать пользователя» для метеора, все в порядке, и пользователь сохраняется, но после этого мой фактический сеанс изменяется новым пользователем. то есть мой пользователь-администратор - «admin», и когда я создаю нового пользователя «foo», сеанс меняется на «foo». Я переопределяю Account.createUser для первоначального запуска

это мой код

Template.usuarioNew.events
  'submit .form': (e) ->
    e.preventDefault()
    username = $('#username').val()
    name = $('#name').val()
    password = $('#password').val()

    roles = $('.role:checked')

    if roles.length == 0
      FlashMessages.sendWarning 'Escoge al menos un rol'
      return

    user =
      'username': username
      'password': password
      'profile':
        'name': name
      'roles': []

    roles.each (i) ->
      user.roles.push $(@).val()
      return

    Accounts.createUser user
    FlashMessages.sendSuccess 'Se ha creado un usuario'
    Router.go('/')

    return

И Accounts.onCreateUser

Accounts.onCreateUser (options, user) ->
  userProperties =
    profile: options.profile || {}
    roles: options.roles || []

  user = _.extend user, userProperties

  if !user.profile.name
    user.profile.name = user.username

  if !Meteor.users.find().count()
    user.roles.push 'admin', 'boss', 'specialist'

  user

person Braulio Soncco    schedule 19.06.2014    source источник


Ответы (1)


Это ожидаемое поведение, если вы вызываете Accounts.createUser из клиента. Как указано в документации:

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

Единственный способ вставить пользователя без входа в систему в качестве вновь созданного пользователя — инициировать процесс создания с сервера. Вы можете сделать это с помощью вызова метода. В обратном вызове submit замените вызов Accounts.createUser user на:

Meteor.call 'insertUser', user

Затем на сервере вы можете реализовать метод следующим образом:

Meteor.methods
  'insertUser': (user) ->
    check user, Match.ObjectIncluding
      username: String
      password: String
      profile: name: String

    Accounts.createUser user

Единственная проблема заключается в том, что вы отправляете пароль пользователя на сервер, что разумно только в том случае, если вы используете SSL. И даже в этом случае может оказаться не очень хорошей идеей...

Если вы не хотите передавать пароль, как указано в документах, вы можете создать пользователя, используя приведенный выше пример, но вы захотите заменить password на email, а затем вызвать sendEnrollmentEmail следующим образом:

Meteor.methods
  'insertUser': (user) ->
    check user, Match.ObjectIncluding
      username: String
      email: String
      profile: name: String

    userId = Accounts.createUser user
    Accounts.sendEnrollmentEmail userId

Затем вам нужно будет создать маршрут на клиенте, который при запросе вызывает resetPassword с соответствующий токен и новый пароль. Выполнение всего этого требует дополнительной работы как для вас, так и для пользователя, но это наиболее безопасная реализация, отвечающая вашим требованиям.

person David Weldon    schedule 20.06.2014