MeteorJS - 如何防止UnloggedIn用户获取数据库?

时间:2014-11-11 09:10:34

标签: collections meteor fetch publish

我使用MeteorJS填充应用。现在我需要解决的一个安全问题是,在我的应用程序中,匿名用户可以自由使用:

Meteor.users.find().fetch() 

...在控制台中获取所有当前用户'信息。我也有包insecure&已删除autopublish

当我从服务器发布此用户集合时,我这样做了:

Meteor.publish 'users basic info', ->
      Meteor.users.find {}, fields:
        "emails"  :1
        "profile" :1

但是当任何客户使用Meteor.users.find().fetch()检索数据时,他们获得的字段多于我限制的字段,例如positionroles等等。

希望你们可以帮助我。非常感谢先进!

1 个答案:

答案 0 :(得分:3)

您的发布功能将所有用户文档返回给客户端,因为您有一个空对象作为查询,这就是客户端可以看到所有用户数据的原因。您需要执行以下操作(道歉,但我不使用CS):

Meteor.publish('users basic info', function() {
    return Meteor.users.find({
        _id: this.userId
    }, {
    fields: {
        profile: 1,
        emails: 1
    });
});

请注意this.userId是一个常量,而不是一个反应变量,但是当登录用户更改时(包括从null),整个发布函数会重新运行,所以这应该可以正常工作。

positionroles等字段不是profile的子字段吗?如果它们不存在并且您没有其他用户数据发布功能(并且删除了自动发布),那么为什么您可以在客户端上看到这些字段真的不清楚。