Collections MeteorJS-如何防止未挖掘的用户获取数据库?

Collections MeteorJS-如何防止未挖掘的用户获取数据库?,collections,meteor,fetch,publish,Collections,Meteor,Fetch,Publish,我正在使用MeteorJS填充一个应用程序。现在我需要解决的一个安全问题是,在我的应用程序中,匿名用户可以自由使用: Meteor.users.find().fetch() …以获取当前用户的所有信息。我还删除了包unsecure&autopublish 从服务器发布此用户集合时,我执行了以下操作: Meteor.publish 'users basic info', -> Meteor.users.find {}, fields: "emails" :1

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

Meteor.users.find().fetch() 
…以获取当前用户的所有信息。我还删除了包
unsecure
&
autopublish

从服务器发布此用户集合时,我执行了以下操作:

Meteor.publish 'users basic info', ->
      Meteor.users.find {}, fields:
        "emails"  :1
        "profile" :1
但是,当任何客户端使用Meteor.users.find().fetch()检索数据时,它们得到的字段比我限制的要多,例如
位置
角色


希望你们能帮我。非常感谢您的光临

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

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


职位
角色
等字段是否不是
档案
的子字段?如果没有,并且您没有其他的用户数据发布功能(并且自动发布被删除),那么您确实不清楚为什么可以在客户端上看到这些字段。

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

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


职位
角色
等字段是否不是
档案
的子字段?如果没有,并且您没有其他的用户数据发布功能(并且自动发布被删除),那么您确实不清楚为什么可以在客户端上看到这些字段。

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

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


职位
角色
等字段是否不是
档案
的子字段?如果没有,并且您没有其他的用户数据发布功能(并且自动发布被删除),那么您确实不清楚为什么可以在客户端上看到这些字段。

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

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


职位
角色
等字段是否不是
档案
的子字段?如果没有,并且您没有其他的用户数据发布功能(并且自动发布被删除),那么您真的不清楚为什么可以在客户端上看到这些字段。

不应该在客户端上出现,确定您没有发布吗?哦,只有当前用户?我刚刚编辑了我的问题。不仅仅是当前用户,任何客户端都可以检索这样的数据:(当然,它似乎与文档相矛盾,它说默认情况下,当前用户的用户名、电子邮件和个人资料会发布到客户端。您可以使用以下命令为当前用户发布其他字段:不应该发生在客户端上,确定您没有发布吗?哦,只有当前用户?我刚刚编辑了我的问题。这不仅仅是当前用户,任何客户端都可以检索这样的数据:(当然,它似乎与文档相矛盾,它说默认情况下,当前用户的用户名、电子邮件和个人资料会发布到客户端。您可以使用以下命令为当前用户发布其他字段:不应该发生在客户端上,确定您没有发布吗?哦,只有当前用户?我刚刚编辑了我的问题。这不仅仅是当前用户,任何客户端都可以检索这样的数据:(当然,它似乎与文档相矛盾,它说默认情况下,当前用户的用户名、电子邮件和个人资料会发布到客户端。您可以使用以下命令为当前用户发布其他字段:不应该发生在客户端上,确定您没有发布吗?哦,只有当前用户?我刚刚编辑了我的问题。这不仅仅是当前用户,任何客户端都可以检索这样的数据:(当然,它似乎与文档相矛盾,它表示默认情况下,当前用户的用户名、电子邮件和配置文件将发布到客户端。您可以使用以下命令为当前用户发布其他字段:
Meteor.publish('users basic info', function() {
    return Meteor.users.find({
        _id: this.userId
    }, {
    fields: {
        profile: 1,
        emails: 1
    });
});