2016-11-20 64 views
0

我想允许客户端进行无限滚动。 事情是,我不想让客户端定义每个数据加载的限制(块),原因是它对我来说不安全,因为集合包含很多文档,并且客户端将被允许请求无限制有少量js注入的文件数量。如何在流星中使用限制强制执行服务器端分页

有什么建议吗?

谢谢!

+0

您在这里没有提供很好的用例。您将安全作为不允许客户指定限制的理由,但这本身并不是安全漏洞。 – Mikkel

+0

您可以随时对请求进行速率限制。您可以查看[DDP Rate Limiter](https://atmospherejs.com/meteor/ddp-rate-limiter)软件包,并直接或作为灵感使用它。 – MasterAM

+0

@Mikkel如果黑客可以请求巨大的数据块,实际上如果他做对了,它可以关闭你的服务器。所以让我们把它作为安全漏洞。 –

回答

1

您可以手动设置发布限制(如每个负载25个文档)。

Meteor.publish('allDocuments', function(pageNavigator = 0) { 
     return CustomCollection.find({},{ skip:pageNavigator, limit:25  
     });  
    }); 

其中pageNavigator是用于寻呼的会话值(例如0,25,50 ...)。 这样它总是会返回每个负载最多25个文档。

+0

然后,当用户向下滚动并且必须检索数据时,需要停止订阅并重新开始? –

+0

流星很聪明,可以为你处理所有这些事情。检查此链接https://docs.meteor.com/api/pubsub.html#Subscription-connection – Dino

+0

skip正在搜索所有文档,因此如果您有150k条记录,则这对性能并不是很好。 – 2017-01-17 22:47:44

相关问题