#meteor #meteorite
#метеор #метеорит
Вопрос:
Я создаю свою пользовательскую страницу «Создать пользователя» для meteor, все хорошо, и пользователь сохраняется, но после этого мой фактический сеанс изменяется новым пользователем. т.Е. Мой администратор — «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
Ответ №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
на an 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 с соответствующим токеном и новым паролем. Выполнение всего этого требует больше работы как для вас, так и для пользователя, но это наиболее безопасная реализация, отвечающая вашим требованиям.