Я использую python 2.7 для своего внешнего интерфейса, поэтому я вынужден использовать rest API для запуска облачных функций для управления всеми операциями хранения.
Прямо сейчас я пытаюсь установить основные правила для хранения, которые делают следующее:
Вот правила хранения:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
}
match /{userId}/{allPaths=**} {
allow write: if request.auth != null && request.auth.uid == userId;
}
}
}
Я заметил, что мое правило записи не работает, хотя при использовании игровой площадки правил в консоли оно проверяет и отклоняет, как и ожидалось.
Я жестко запрограммировал свою облачную функцию для записи в хранилище с определенным uid в пути, поэтому теоретически только тот пользователь с совпадающим uid должен иметь возможность писать в нее. Хотя, если я аутентифицируюсь с другой учетной записью, он все равно может написать, когда ему должно быть отказано. Так почему же он игнорирует мои правила хранения?
В Python я вызываю конечную точку следующим образом:
img_url = "C:/Users/USER/pic.jpg"
with open(img_url, "r") as f:
img_data = f.read().encode("base64")
url = "https://us-central1-[REDACTED].cloudfunctions.net/upload?key = {apiKey}".format(apiKey=api_key)
params = {"imgData": img_data, "idToken": id_token, "mediaType": "image/jpeg"}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + id_token}
response = requests.post(url, headers=headers, data=json.dumps(params))
print response
Ответ будет 200
, и файл будет успешно записан, даже если токен идентификатора, который я передаю, предназначен для другого пользователя.
Игнорируются ли правила хранения, если я прохожу паузу? Нужно ли мне подтверждать это самостоятельно в облачной функции?
Если это имеет значение, в облачной функции я использую admin.storage.bucket.file.save
для записи.
Когда вы получаете доступ к службам Firebase с помощью Firebase Admin SDK, все правила безопасности полностью игнорируются. Это относится к облачным функциям, которые используют Admin SDK.
Другими словами, правила безопасности применяются только к «прямому» доступу веб-клиентов и мобильных клиентов.
Итак, отвечая на ваши вопросы:
Игнорируются ли правила хранения, если я прохожу паузу?
На самом деле вы вызываете Облачную функцию HTTPS, которая, в свою очередь, взаимодействует с сервисом Cloud Storage. Это немного отличается от «прохода через REST API». Вот почему «правила хранения игнорируются».
Нужно ли мне подтверждать это самостоятельно в облачной функции?
Да, это именно то, что вам нужно сделать. Вам необходимо реализовать свою собственную проверку, так как, как было сказано выше, правила безопасности обходят.