【问题标题】:Firestore beginTransaction REST API returns PERMISSION_DENIED when creating a readWrite transactionFirestore beginTransaction REST API 在创建读写事务时返回 PERMISSION_DENIED
【发布时间】:2019-11-29 23:01:28
【问题描述】:

我需要更新事务中的某些 Firestore 文档。

firestore.projects.databases.documents.beginTransaction 在创建 readWrite 事务时失败,但对于 readOnly 事务成功。

我已确保数据库处于测试模式,所有读写都打开

service cloud.firestore {
    match /databases/{database}/documents {
        match /{document=**} {
        allow read, write: if true;
        }
    }
}

(失败)

https://firestore.googleapis.com/v1beta1/projects/foo-bar-12345/databases/(default)/documents

    { 
        "options": {
            "readWrite": {}
        }
    }

错误响应:

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

(成功)- 将选项更改为只读,返回一个事务

https://firestore.googleapis.com/v1beta1/projects/foo-bar-12345/databases/(default)/documents

    { 
        "options": {
            "readOnly": {}
        }
    }

成功响应:

    {
        "transaction": "EcMecxy5IXKoIlkAIx+ixOCJ/NT6gvpbaEwWk/5YkOxVxSeMWpOdG4H2nZGK3Y0Pmcj+lbvk6sAlw68UpFgjd8puTpyS2Vwm2X6mw2SKKKKK9OakXxkGgi+8o4vx70Qd4YQaGg=="
    }

【问题讨论】:

  • 您如何验证您的请求,Firebase Auth 或 Google OAuth?只有在您使用 Firebase 身份验证时,安全规则才会影响您的请求,cloud.google.com/firestore/docs/…
  • 谢谢胡安。数据库处于测试模式,完全开放读写,所以我根本没有进行身份验证。我可以成功地创建、阅读、更新或删除文档。我似乎唯一不能做的就是创建一个读写事务

标签: google-cloud-firestore


【解决方案1】:

beginTransaction REST API 方法不支持对 readWrite 事务的未经身份验证的请求。

要以原子方式提交多个未经身份验证的写入,您可以使用commit 方法。

【讨论】:

  • 好的,明白了,关于 beginTransaction。 thx 关于提交,我一直假设我在调用提交时需要传入事务。
  • 所以这是正确的调用流程,假设我需要事务而不仅仅是原子提交:1. beginTransaction(确保我已通过身份验证)2. getDocument(从 1 传入 readWrite 事务)3. 提交(传递交易并包括任何更新)
  • 正确,我相信您必须使用 Google OAuth(而不是 Firebase Auth)进行身份验证。
  • 不用担心。会做。谢谢你的帮助
  • @Juan Lara:你能解释一下为什么通过 Bearer 使用 firebase Auth 令牌在这里不起作用吗?我遇到了同样的问题,我尝试像发送其他 Firestore Rest API 一样发送 Firebase Auth 令牌作为标头中的承载。或者有没有办法扩展 Firebase Auth 令牌的范围?
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 2021-06-22
  • 2014-09-24
  • 1970-01-01
  • 2019-10-17
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多