#firebase #google-cloud-firestore #firebase-app-check
#firebase #google-облако-firestore #firebase-app-проверка
Вопрос:
У меня есть этот простой код с использованием Firestore-PHP
<?php
require 'vendor/autoload.php';
use GoogleCloudFirestoreFirestoreClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS='.realpath("key.json"));
$db = new FirestoreClient();
$docRef = $db->collection('orders')->document('1562292363537');
$snapshot = $docRef->snapshot();
?>
Все мои PHP-вызовы Firestore начали внезапно получать эту ошибку: (403: запрещено)
Uncaught GoogleCloudCoreExceptionServiceException: {
"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.
Я попытался создать новый ключ учетной записи службы с полными разрешениями, но это бесполезно.
Эта ошибка возникла в то же время, когда проверка приложения начала показывать этот график:
Хотя проверка приложения не выполняется в настройках
Есть ли способ исправить эту проблему, пожалуйста?
Ответ №1:
Просто предположение, поскольку я не видел его раньше, но я подозреваю, что «Unenforced» в статусе RTDB и Cloud Firestore вызваны слабыми или отсутствующими правилами.
Убедитесь, что у вас установлены правила и что они не оставляют вашу базу данных «широко открытой» с точки зрения безопасности.
Например, если у вас есть Allow read, write: true
, то ваша база данных «широко открыта». По крайней мере, вы хотите обеспечить проверку подлинности пользователей с помощью чего-то вроде: Allow read, write: if request.auth.uid != null
(Примечание: вы все равно можете разрешить анонимным пользователям доступ к вашему приложению, включив анонимную аутентификацию, если Firebase Auth. Анонимные пользователи Firebase Auth по-прежнему используют «аутентифицированные» запросы)
Комментарии:
1. Я хочу сохранить проверку приложения (без принудительной проверки).. Я могу активировать ее, но это мне не поможет .. также редактирование правил не устранило проблему
Ответ №2:
Судя по вашему скриншоту, ошибки вызваны устаревшими запросами клиентов. Проверьте библиотеку, которую вы используете, и убедитесь, что они обновлены, согласно этой ссылке о том, как включить проверку приложений в веб-приложениях.
Вот несколько рекомендаций, которые могут быть полезны для вас:
- Если почти все последние запросы поступают от проверенных клиентов, рассмотрите возможность включения принудительного применения, чтобы начать защиту ваших внутренних ресурсов.
- Если значительная часть недавних запросов поступает от клиентов, которые, вероятно, устарели, чтобы не мешать пользователям, подумайте о том, чтобы подождать, пока другие пользователи обновят ваше приложение, прежде чем включать принудительное выполнение. Принудительная проверка приложения в выпущенном приложении приведет к разрыву предыдущих версий приложения, которые не интегрированы с SDK App Check.
- Если ваше приложение еще не запущено, вам следует немедленно включить принудительную проверку приложений, поскольку устаревшие клиенты не используются.
Комментарии:
1. Но проверка приложения еще недоступна для PHP !?
2. Какую версию PHP вы используете? Я пробовал использовать
export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
терминал, и у меня все работало нормально. Что касается проверки приложения, оно все еще находится в стадии бета-тестирования, поэтому пока поддерживаются не все языки.
Ответ №3:
Я только что столкнулся с этой проблемой. Это было связано с использованием устаревшего пакета firebase-admin. По-видимому, без предупреждения Google устарел v8 и ниже. Вам нужно будет обновить ваш пакет до последней версии.
npm i firebase-admin@latest