Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Google Cloud函数的访问问题在默认数据库中读取对Google Cloud Firestore集合的访问权限_Python 3.x_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Python 3.x Google Cloud函数的访问问题在默认数据库中读取对Google Cloud Firestore集合的访问权限

Python 3.x Google Cloud函数的访问问题在默认数据库中读取对Google Cloud Firestore集合的访问权限,python-3.x,google-cloud-firestore,google-cloud-functions,Python 3.x,Google Cloud Firestore,Google Cloud Functions,我正在尝试用python编写一个云函数,它将读取Google cloud Firestore(本机)中的集合[而不是实时数据库或数据存储] 我已为项目创建了一个具有以下角色的服务帐户: -项目业主 -Firebase管理员 -服务帐户用户 -云功能开发者 -项目编辑 在本地运行时,我在我的环境中设置服务帐户凭据:GOOGLE\u APPLICATION\u凭据 我的云功能可以访问云存储。我只对Cloud Firestore有问题 我已经尝试使用客户端Python SDK和管理员SDK(Pytho

我正在尝试用python编写一个云函数,它将读取Google cloud Firestore(本机)中的集合[而不是实时数据库或数据存储]

我已为项目创建了一个具有以下角色的服务帐户: -项目业主 -Firebase管理员 -服务帐户用户 -云功能开发者 -项目编辑

在本地运行时,我在我的环境中设置服务帐户凭据:GOOGLE\u APPLICATION\u凭据

我的云功能可以访问云存储。我只对Cloud Firestore有问题

  • 我已经尝试使用客户端Python SDK和管理员SDK(Python)。AdminSDK似乎只适用于实时数据库,因为它需要数据库URL才能连接

  • 我试着从我的开发机器上运行,并将其作为云函数运行

  • 我还将Firestore访问规则更改为以下,以实现无限制访问:

  • 我试图在谷歌文档中运行相同的代码

    从google.cloud导入firestore
    def进程存储文件(数据、上下文):
    #添加新文档
    db=firestore.Client()
    doc_ref=db.collection(u'users')。文档(u'alovelace')
    文件参考集({
    u'first':u'Ada',
    “最后一个”:你的“爱”,
    你出生于1815年
    })
    #然后查询文档
    用户\u ref=db.collection(u'users')
    docs=用户\u ref.get()
    对于文档中的文档:
    打印(u'{}=>{}'。格式(doc.id,doc.to_dict())
    
    我无法让云功能连接到Google Cloud Firestore。我得到一个错误:

    第3行,来自google.api\u core.exceptions.PermissionDenied的raise\u中:403缺少或权限不足。


    云功能和Firestore都在同一个GCP项目中。

    首先,检查您是否随代码一起上载了服务帐户的凭据JSON文件,并且在云功能的配置页面中也设置了
    GOOGLE\u APPLICATION\u CREDENTIALS
    环境变量。(我知道上传凭证是个坏主意,但如果不想使用JSON文件,则需要将JSON文件放在某个位置。)


    其次,您可能希望为您的服务帐户提供云数据存储用户角色(或类似角色),而不是Firebase管理员。新的Firestore似乎可以通过云数据存储X角色而不是Firebase角色进行访问。

    您在云函数UI配置中指定的服务帐户需要具有数据存储用户角色。

    在您展示的Python代码中,您从未实际定义过云函数入口点。那在哪里?您打算如何触发代码?当文件上传到云存储时,会触发代码。入口点被定义为云功能部署的一部分。这部分代码正在运行。例外情况仅出现在上面第“docs=users\u ref.get()”行的代码中。文档建议您为部署定义一个函数。我在这里看不到函数。我已经用这个函数更新了代码。
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }