流星中minimongo的原因是啥

Posted

技术标签:

【中文标题】流星中minimongo的原因是啥【英文标题】:What is reason of minimongo in meteor流星中minimongo的原因是什么 【发布时间】:2019-02-15 06:37:34 【问题描述】:

什么是实际原因以及在流星中应该如何使用 minimongo?为了安全起见,客户端不应访问查询。所以它们应该只保存在服务器上。因此,无论如何都不应该在客户端上查询任何内容。

即使查询代码保留在客户端,服务器上的数据也不应该由客户端直接更新,而是应该将执行的操作发送到服务器,服务器应该联系 Mongo 并执行操作。我是否正确理解了这部分?这是允许/拒绝规则的原因吗?

但是,meteor 文档仍然认为允许/拒绝规则不够安全,并且仍然不应允许此类写入。我是否正确理解了第二部分?

如果是这样,那么使用 minimongo 的原因是什么?只是为了原型设计吗?如果我想获得最高的安全性并因此避免使用允许/拒绝(禁止一切),那么我可以删除 minimongo,还是它是必需的并且仍然用于某些事情?为了什么?

谢谢。

【问题讨论】:

这篇文章应该给你解释一下为什么我们使用Minimongo以及为什么它不影响安全性:blog.meteor.com/optimistic-ui-with-meteor-67b5a78c3fcf 所以它只是用于数据加载,而不是用于数据更改,对吧? 【参考方案1】:

由于以下内容对于评论来说太短了,我将创建它作为答案。我不会声称它是完整的。希望它能很好地解释这种情况。

最初 minimongo 旨在反映对集合的操作“就好像它们会出现在服务器端一样”。 Meteor 自动将执行的操作与服务器端集合同步 - 为您节省大量设计和开发时间。

允许/拒绝被发明为一个额外的控制层,因此客户端只能操作涉及允许/拒绝中定义的操作的数据。

然而,a critical security vulnerability 已被发现,这就是为什么现在不鼓励这样做,而应使用服务器端方法。

您可以自己尝试,方法是创建一个集合并将allow 设置为true 以将insert, update, delete 设置为true,然后在客户端上执行其中的一些操作。一个简洁的功能,但不幸的是已经过时了(甚至不确定是否 100% 在新版本中工作)。

但这还不是全部!当涉及到cursors 的客户端查询操作时,您仍然可以使用minimongo。非常强大的概念包括cursor.observe 和cursor.observeChanges。如果对数组使用传统的迭代方法,您还可以创建需要大量工作的复杂查询。

最后 minimogno 仍然是您同步文档的目的地(由客户端订阅并由服务器发布)。它表示数据的投影,可以在publication 中定义为最精细的数据。

【讨论】:

以上是关于流星中minimongo的原因是啥的主要内容,如果未能解决你的问题,请参考以下文章

在新数据到达 Meteor 时对其进行动画处理

高压缩视频中出现的块的原因/用途/原因是啥?

hadoop中这种失败的原因是啥?

流星方法不起作用

testWidgets 方法中“异步”的原因是啥?

Java Logging 框架中的标记是啥,使用它们的原因是啥?