2015-10-05 62 views
2

我想发布一些关于我的用户的有限用户信息,其想法是我的web应用的管理员角色可以查看电子邮件地址和用户名(最后一个在配置文件数据中)。流星:发布一些用户数据

Meteor.publish("usersSpecificDataforAdmin", function() { 
    return Meteor.users.find({}, {fields: { 
     'profile': 1, 
     'emails': 1, 
     'roles': 1 
    }}); 

}); 我然后订阅这在我的路由器:

adminRoutes.route('/users', { 
    name: 'adminUsersList', 
    subscriptions: function (params, queryParams) { 
    this.register('adminUsersList', Meteor.subscribe('usersSpecificDataforAdmin')); 
    }, 
    action: function (params, queryParams) { 
    BlazeLayout.render('layout_frontend', { 
     top: 'menu', 
     main: 'adminUsersList', 
     footer: 'footer' 
    }); 
    } 
}); 

在模板中,我使用下面显示用户的电子邮件地址:“{{emails.address}}”,但不起作用。我可以显示所有其他信息。

我有以下问题:

  • 我怎么可以在模板
  • ,即使我没有在发布中添加密码或服务字段显示用户的电子邮件地址,它是发(做Meteor.user())是揭示所有的信息,包括密码等,这在我看来是一个安全问题。我如何禁用这个发布?

回答

3

几件事情:

  1. 你并不需要在字段列表_id公布,它总是包含
  2. 要发布allUserData但您的路由器代码订阅到usersAllforAdmin你没有显示代码。我怀疑出版物包括services
  3. 密码不存储任何地方流星,只有bcrypt散列密码存储在services
  4. emails是一个数组,你不能{{emails.address}}访问它在spacebars,而是使用{{emails.[0].address}}(reference)
+0

谢谢。我原来的帖子确实犯了一个错误。我编辑了原始问题以包含正确的代码。您对第4项的建议确实有效。唯一奇怪的是,'profile:1'虽然在浏览器中执行'Meteor.user()'时不显示,但模板正在显示它。当我删除'个人资料:1'时,模板不显示它。 – wiwa1978

+0

您的路线中没有“waitOn”,在订阅被提取时可能会有延迟。我会使用'waitOn'而不是'subscriptions' –