2015-10-05 63 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' –