【问题标题】:Sudden error (403-Forbidden) on Firestore callsFirestore 调用的突然错误(403-Forbidden)
【发布时间】:2022-01-16 01:23:24
【问题描述】:

我有这个使用Firestore-PHP的简单代码

<?php

require 'vendor/autoload.php';
use Google\Cloud\Firestore\FirestoreClient;

putenv('GOOGLE_APPLICATION_CREDENTIALS='.realpath("key.json"));

$db = new FirestoreClient();

$docRef = $db->collection('orders')->document('1562292363537');
$snapshot = $docRef->snapshot();

?>

我对 Firestore 的所有 PHP 调用突然开始出现此错误:(403:Forbidden)

Uncaught Google\Cloud\Core\Exception\ServiceException: {
    "message": "403:Forbidden",
    "code": 14,
    "status": "UNAVAILABLE",
    "details": [
        {
            "@type": "content-length",
            "data": "0"
        },
        {
            "@type": "date",
            "data": "Sun, 12 Dec 2021 00:00:36 GMT"
        },
        {
            "@type": "alt-svc",
            "data": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
        }
    ]

我在两个不同的项目中遇到了这个问题,并使用了最新的 Google-Cloud-SDK。

我尝试创建一个具有完全权限的新服务帐户密钥,但没有任何好处。


此错误与 App Check 开始显示此图的同时开始:

虽然设置中未强制执行应用检查

请问有没有办法解决这个问题?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-app-check


    【解决方案1】:

    只是一个猜测,因为我以前没有见过,但我怀疑 RTDB 和 Cloud Firestore 状态中的“未执行”是因为规则松懈或缺失。

    确保您已设置规则,并且从安全角度来看,它们不会让您的数据库“敞开”。

    例如,如果您有Allow read, write: true,那么您的数据库是“完全开放的”。至少您希望强制用户通过以下方式进行身份验证:Allow read, write: if request.auth.uid != null

    (注意:如果 Firebase 身份验证,您仍然可以通过启用匿名身份验证来允许匿名用户访问您的应用。匿名 Firebase 身份验证用户仍在使用“经过身份验证”的请求)

    【讨论】:

    • 我想保留应用检查(未强制)。我可以激活它,但这对我没有帮助。。编辑规则也没有解决问题
    【解决方案2】:

    从您的屏幕截图中,错误是由于客户端请求过时造成的。根据how to enable App Check in web apps 上的链接,检查您正在使用的库并确保它们已更新。

    以下是一些可能对您有所帮助的指南:

    • 如果几乎​​所有最近的请求都来自经过验证的客户端,请考虑启用强制措施以开始保护您的后端资源。
    • 如果最近的请求中有很大一部分来自 可能已过时的客户端,为避免干扰用户,请考虑等待 让更多用户在启用强制执行之前更新您的应用。 对已发布的应用程序执行应用程序检查将破坏以前的应用程序版本 未与 App Check SDK 集成。
    • 如果您的应用尚未启动,则应启用应用检查 立即执行,因为没有任何过时的客户 使用。

    【讨论】:

    • 但 PHP 尚不支持 App Check !?
    • 您使用的是什么 PHP 版本?我试过在终端上使用export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json",对我来说效果很好。至于 App Check,它仍处于测试阶段,因此尚未支持所有语言。
    【解决方案3】:

    我刚刚遇到了这个问题。它与使用过时的 firebase-admin 软件包有关。显然,谷歌在没有警告的情况下已经过时了 v8 及更低版本。您需要将软件包升级到最新版本。

    npm i firebase-admin@latest

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 2016-06-04
      • 2016-04-05
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2022-08-02
      相关资源
      最近更新 更多