【问题标题】:Meteor: publish some user dataMeteor:发布一些用户数据
【发布时间】:2015-10-05 19:56:56
【问题描述】:

我想发布一些关于我的用户的有限用户信息,想法是我的网络应用程序的管理员角色可以查看电子邮件地址和用户名(最后一个在个人资料数据中)。

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())会泄露所有信息,包括密码等,这是我的一个安全问题观点。如何禁用此发布?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    几件事:

    1. 您不需要在要发布的字段列表中包含_id,它始终包含在其中
    2. 您正在发布allUserData,但您的路由器代码订阅了usersAllforAdmin,您没有显示代码。我怀疑该出版物包括services
    3. 密码不会存储在 Meteor 的任何地方,只有密码的 bcrypt 哈希存储在 services
    4. emails 是一个数组,你不能用空格键中的{{emails.address}} 访问它,而是使用{{emails.[0].address}} (reference)

    【讨论】:

    • 谢谢。我在原帖中确实犯了一个错误。我已经编辑了原始问题以包含正确的代码。您对第 4 项的建议确实有效。唯一奇怪的是,虽然'profile:1',但当我在浏览器中执行'Meteor.user()'时它没有显示,但模板正在显示它。当我删除“profile:1”时,模板不显示它。
    • 您的路线中没有waitOn,在获取订阅时可能会有延迟。我会使用waitOn 而不是subscriptions
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多