【问题标题】:Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]未捕获的错误:不允许。不受信任的代码只能按 ID 更新文档。 [403]
【发布时间】:2015-07-12 08:12:25
【问题描述】:

我有这个错误,但它没有指定哪个代码行有问题。 有什么方法可以缩小我需要关注的代码范围吗?

不确定这是否是相关问题,但是当我提交文档并且它应该识别我的user.username 时,但是当 html 显示 {{author}} 时它出现空白。

集合的代码(公共/服务器的共享文件夹)如下:

var post = _.extend(postAttributes, {
  userId: user._id, 
  author: user.username
});


感谢您的帮助!


更新:

将 UserAccount 代码转移到服务器文件夹后的新错误消息。 Exception while simulating the effect of invoking 'postInsert' "Match error: Unknown key in field message"

【问题讨论】:

  • “我有这个错误,但它没有指定哪个代码行有问题。” 那它为什么指向mongo.js:472?它准确地告诉你哪条线路有问题。
  • @Cerbrus 为缺少的行道歉,已附上它们

标签: javascript collections meteor


【解决方案1】:

您在客户端的代码使用不是_id 作为其查询运算符来更新文档。

无法使用这样的查询在客户端上进行更新。不过,您可以在服务器上执行这些操作。

所以,如果你在某处有这样的代码,你可以运行它而不会抛出你得到的错误:

MyCollection.update({ someName: someValue }, {$set:{something:true}});

你可以这样做:

var doc = MyCollection.findOne({ someName: someValue });
MyCollection.update({ _id: doc._id }, {$set:{something:true}});

您可以在此处明确定义要更新的文档。要查找此代码,您可能需要查找其中包含 .update 且可在客户端运行的任何内容。

【讨论】:

  • @Thinkerer 是的,这可能是导致它的行。它只需要在服务器上运行。如果将其从共享文件夹移动到服务器文件夹,它应该可以解决问题。客户仍然可以毫无问题地访问这些记录,因为它们是由 accounts-* 模块发布的。
  • @Thinkerer config.js 中的那些,截图上的 130-138。
  • 我认为它有效。错误消息消失了,但仍然无法识别 {{author}} 并出现新错误。已经贴在上面了。
  • @Thinkerer 这是与原版无关的问题。对于这个,您在客户端 Meteor.methods 中有代码,其中包含 check 方法。您正在使用包含message 的文档运行此方法。你没有在 check 方法中定义这个,因此它会抛出这个错误。
  • @Thinkerer 在你的截图上。 postAttributes 有一个message,但你的checktitleuri,但没有message
【解决方案2】:

更改允许/拒绝规则

从 0.5.8 开始,仅客户端代码(例如事件处理程序)一次只能更新或删除一个文档,由 _id 指定。方法代码仍然可以使用任意 Mongo 选择器一次操作任意数量的文档。要从事件处理程序运行复杂的更新,只需使用 Meteor.methods 定义一个方法并从事件处理程序调用它。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多