【问题标题】:How to implement server side pagination with limit enforcement in Meteor如何在 Meteor 中通过限制强制执行服务器端分页
【发布时间】:2016-11-22 16:38:54
【问题描述】:

我想让客户端无限滚动。 事情是我不想让客户端定义每个数据加载的限制(块),原因是它对我来说不安全,因为集合包含很多文档,并且客户端将被允许请求无限数量带有一点 js 注入的文档。

有什么建议吗?

谢谢!

【问题讨论】:

  • 您在这里没有提出一个好的用例。您引用安全性作为不允许客户端指定限制的原因,但这本身并不是安全漏洞。
  • 您可以随时对请求进行速率限制。您可以查看DDP Rate Limiter 包并直接使用它或作为灵感。
  • @Mikkel 如果黑客可以请求大量数据块,实际上如果他做得对,它可以关闭您的服务器。所以让我们把它作为安全漏洞。

标签: mongodb reactjs meteor meteor-react


【解决方案1】:

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

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

其中 pageNavigator 是用于分页的会话值(例如 0、25、50 ...)。 这样,每次加载时它总是会返回最多 25 个文档。

【讨论】:

  • 然后,当用户向下滚动,需要检索数据时,是否需要停止订阅并重新开始?
  • Meteor 足够聪明,可以为您处理所有这些问题。检查此链接docs.meteor.com/api/pubsub.html#Subscription-connection
  • skip 正在搜索所有文档,因此如果您有 150k 条记录,这对于性能来说根本就不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2011-05-16
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
相关资源
最近更新 更多