Meteor:禁止用户在插入文档时选择id

时间:2013-08-07 14:39:35

标签: meteor

当使用mini-mongo将文档插入集合时,用户可以传递_id字段,只要它是字符串或ObjectID(并且不与现有ID冲突),就会在文档上设置_id。这对我来说似乎不合理。我希望服务器始终生成文档的_id,所以我最终不会得到一个db,其中两个字符串(可能具有不同长度)和ObjectID存在为_ids。

有没有简单的方法来实现这一目标?现在我能想到的最好的方法是在拒绝规则中检查id(其中_id将已经由Meteor设置或者是用户提供的值),如果它不是我希望它的类型/长度,我改变它,但这也需要检查,以避免重复的ID。不是太难,但对于像这样基本的东西来说似乎过于复杂。

2 个答案:

答案 0 :(得分:0)

回顾我的回答,这是你的回答:

拒绝所有插页。创建methodcollectionInsert(document),检查是否指定了_id字段。

Meteor.methods({
  collectionInsert: function(document) {
    if (document && document._id) {
      delete document._id;
    }
    // Returns the _id generated
    return collection.insert(document);
  }
});

在今天的meteor版本(0.8及更高版本)中,无论如何,服务器和客户端在这种情况下生成相同的_id。但是使用此方法应确保客户端模拟字段插入,并确保生成的_id的服务器版本具有权威性。

答案 1 :(得分:0)

执行此操作的正确方法可能是在Meteor.method中插入。您无法在高风险应用程序中信任客户端生成的ID,因此使用collection#insert / allow挂钩的deny是不够的。相反,调用方法来执行插入操作,这将始终创建服务器生成的ID。

您仍然可以在客户端上存储此方法以进行延迟补偿,但在服务器调用返回时将覆盖插入的ID。