1

我有这个使用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 开始显示此图的同时开始:

在此处输入图像描述

虽然 App check 在设置中是 Unenforced

在此处输入图像描述

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

4

3 回答 3

0

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

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

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

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

于 2021-12-12T18:03:50.540 回答
0

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

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

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

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

npm i firebase-admin@latest

于 2022-01-03T22:53:56.593 回答