流星:发布一些用户数据
问题描述:
我想发布一些关于我的用户的有限用户信息,其想法是我的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())是揭示所有的信息,包括密码等,这在我看来是一个安全问题。我如何禁用这个发布?
答
几件事情:
- 你并不需要在字段列表
_id
公布,它总是包含 - 要发布
allUserData
但您的路由器代码订阅到usersAllforAdmin
你没有显示代码。我怀疑出版物包括services
- 密码不存储任何地方流星,只有bcrypt散列密码存储在
services
-
emails
是一个数组,你不能{{emails.address}}
访问它在spacebars,而是使用{{emails.[0].address}}
(reference)
谢谢。我原来的帖子确实犯了一个错误。我编辑了原始问题以包含正确的代码。您对第4项的建议确实有效。唯一奇怪的是,'profile:1'虽然在浏览器中执行'Meteor.user()'时不显示,但模板正在显示它。当我删除'个人资料:1'时,模板不显示它。 – wiwa1978
您的路线中没有“waitOn”,在订阅被提取时可能会有延迟。我会使用'waitOn'而不是'subscriptions' –