我正在创建我的自定义"创建用户"对于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
答案 0 :(得分:3)
如果您从客户端调用Accounts.createUser
,这是预期的行为。正如the documentation中指出的那样:
在客户端上,此功能在成功完成时以新创建的用户身份登录。在服务器上,它返回新创建的用户ID。
在没有以新创建的用户身份登录的情况下插入用户的唯一方法是从服务器启动创建过程。您可以使用方法调用执行此操作。在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时才合理。即便如此,may not be a great idea ......
如果您不想传输密码,正如文档所指出的那样,您可以使用上面的示例创建用户,但您需要将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。完成所有这些对您和用户来说都是更多的工作,但它是最安全的实现,可以满足您的要求。