无法找出正确的Firestore REST API调用顺序来使用事务更新文档

时间:2019-07-19 11:34:25

标签: rest transactions google-cloud-firestore

我找不到正确的调用顺序来更新事务中的文档。我正在使用firebase v1beta1 REST API。我正在使用以下顺序:

  1. 调用“ beginTransaction”,以创建ReadWrite事务
  2. 为感兴趣的文档调用“获取”,将交易从1英寸传递过来
  3. 调用“提交”,在提交中编写文档更新

开始ReadWrite事务时失败。我收到“缺少权限或权限不足”的信息。错误。 请注意,数据库处于测试模式(所有读取和写入仅针对该测试处于打开状态),因此我认为这不是权限错误。

  • 我已经浏览了firebase文档,并且有其他所有交易示例,除了REST之外。因此,我刚刚从阅读REST API参考文档中得出了上面的顺序

  • 我已经检查数据库处于测试模式,并且所有读取和写入均处于打开状态。它是。我可以使用createDocument在数据库中创建,更新或删除集合,删除和更新REST API

  • 我已使用Google api资源管理器来确保我具有正确的请求结构 https://developers.google.com。 -然后搜索要使用的API firestore.projects.databases.documents。{您想要的API}

  • 我尝试调用beginTransaction成功创建一个只读事务,该事务工作正常。

(数据库的安全规则)

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}
  • 我尝试调用beginTransaction成功创建一个只读事务,该事务工作正常。

(这将返回交易)

POST https://firestore.googleapis.com/v1beta1/projects/foo-bR-12345/databases/(default)/documents:beginTransaction
 {
 "options": {
  "readOnly": {
  }
 }
}

(不是)

POST https://firestore.googleapis.com/v1beta1/projects/foo-bar-12345/databases/(default)/documents:beginTransaction
{
 "options": {
  "readWrite": {
  }
 }
}

这是我开始ReadWrite事务时遇到的错误。我知道这看起来像一个安全规则问题,但是如果您知道URL,则数据库是完全开放的。

{
    "error": {
        "code": 403,
        "message": "Missing or insufficient permissions.",
        "status": "PERMISSION_DENIED"
    }
}

我尝试尝试的另一件事是查看呼叫顺序是否正确

1)开始 ReadOnly 交易(有效)

2)调用get文档,将事务传递到(工厂)

3)调用commit,更新文档。 调用失败-错误

{
 "error": {
  "code": 400,
  "message": "Cannot modify entities in a read-only transaction.",
  "status": "INVALID_ARGUMENT"
 }
}

这是我期望的,因为它是只读事务

1 个答案:

答案 0 :(得分:0)

(感谢Juan Lara)正确的顺序是  1. beginTransaction(确保我已通过身份验证)
 2. getDocument(从1传递readWrite事务)  3.提交(传递事务并包括所有更新)

commit,也可以不使用txn来执行一系列自动更新