MeteorJS - 如何防止匿名客户端订阅集合?

Posted

技术标签:

【中文标题】MeteorJS - 如何防止匿名客户端订阅集合?【英文标题】:MeteorJS - How to prevent anonymous clients from Subscribing to a collection? 【发布时间】:2014-11-17 07:58:56 【问题描述】:

我正在使用Meteor 创建一个网络应用程序。

我正在处理的问题是我有一个名为 Books 的集合,我希望它只对登录用户可用,而对匿名用户不可用。

这就是我的工作:

if (Meteor.userId()) Meteor.subscribe('Books');

但这不是最好的解决方案,因为匿名用户仍然可以通过打开浏览器控制台并调用Meteor.subscribe('Books'); 来获取Books 集合信息。

不幸的是,这是迄今为止我能想到的唯一解决方案。我听说过 Meteor 的 allowdeny,但它们似乎只影响用户插入更新删除集合(不阻止用户订阅集合)。

【问题讨论】:

【参考方案1】:

您可以将订阅限制为从服务器端登录的用户,如下所示:

来自Meteor & Security: Setting the Record StraightSacha Greif:

仅在用户登录时发布帖子:

Meteor.publish('posts', function()    if(this.userId)
    return Posts.find();    );

在您的情况下,您需要将posts 更改为books,并正确大写以匹配其他代码。

这将导致匿名时手动订阅尝试变为空。

【讨论】:

以上是关于MeteorJS - 如何防止匿名客户端订阅集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止任意客户端应用程序使用匿名 Web API?

使用集合的meteorJS会话

Meteor JS - 在不同的客户端之间共享集合(如管理员门户与消费者门户)

Meteor 发布/订阅独特客户端集合的策略

如何防止 Firebase 上的匿名密钥?

MeteorJS在点击事件中获取MongoDB ID