Я ищу подтверждение ожидаемого поведения способа, которым API-интерфейс REST Firestore Emulator обрабатывает неаутентифицированные запросы, поскольку, как мне кажется, я обнаружил некоторые возможные несоответствия.
Я играл с REST API Firestore Emulator, используя Postman для личного проекта. Если я запускаю эмулятор (firebase emulators:start --only=firestore
), я могу успешно выполнить следующие запросы БЕЗ , которым необходимо передать любой токен Bearer
в заголовок Authorization
с запросом:
GET http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/
(возвращает все документы) DELETE http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID>
(удаляет отдельный документ) POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>
(создает новый документ в коллекции) PATCH http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID>
(Обновляет документ)
Однако, когда я пытаюсь получить список идентификаторов коллекции, как описано здесь , используя следующий запрос, я получаю следующую ошибку :
POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents:listCollectionIds
Ответ:
{
"error": {
"code": 403,
"message": "Metadata operations require admin authentication.",
"status": "PERMISSION_DENIED"
}
}
Если я передам токен Bearer
, этот запрос будет успешно выполнен. Я сгенерировал токен, используя gcloud auth application-default print-access-token
(как описано здесь ).
Обратите внимание, я установил свои правила Firestore, чтобы разрешить все операции чтения и записи для всех документов, чтобы упростить работу сейчас:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true
}
}
}
В документах приводятся подробности для аутентификации, однако контекст, в котором они описываются, предназначен для выполнения запросов к https://firestore.googleapis.com/v1/
, а не при использовании эмулятора.
Я бы ожидал, что все запросы к API-интерфейсу эмулятора не требуют какой-либо аутентификации, но, похоже, что некоторые делают, а некоторые нет, и я не смог найти в документации другие подробности о том, как должен работать эмулятор .
В настоящий момент я не уверен, является ли это ошибкой, и мне следует сообщить о проблеме на GitHub, или это ожидаемое поведение, и я должен просто передавать токен Bearer
с каждым запросом быть в безопасности.
Любая помощь будет оценена. Благодаря.