Firebase Storage не может обновить CORS через gsutil - PullRequest
0 голосов
/ 23 октября 2019

Итак, я разрабатываю приложение Electron (7) с Angular (8) и Firebase. Чтобы получить доступ к файлам в Firebase Storage, я уже настроил json-файл CORS.
Он содержит http://localhost:4200 url для разработки, а также file:// url для пакетной сборки электронов. Запросы от localhost работают, но file: // блокируются.

CORS.json

[
  {
    "origin": ["http://localhost:4200", "file://"],
    "responseHeader": ["Content-Type"],
    "method": ["GET", "HEAD", "DELETE"],
    "maxAgeSeconds": 3600
  }
]

Ошибка

Access to fetch at 'https://firebasestorage.googleapis.com/v0/b/[...]' from origin 'file://' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:4200' that is not equal to the supplied origin. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Я установил правила CORS через gsutil сследующая команда:

gsutil cors set cors.json "bucket url"

Выполнение команды gsutil cors get "bucket url" возвращает файл CORS.json выше. Кажется, что новый файл CORS не загружается Firebase или чем-то еще.

Например, если я пытаюсь загрузить следующую конфигурацию через gsutil:

[
  {
    "origin": ["https://some-domain.com"],
    "responseHeader": ["Content-Type"],
    "method": ["GET", "HEAD", "DELETE"],
    "maxAgeSeconds": 3600
  }
]

Я все еще получаю ошибку, содержащую http://localhost:4200 внутри заголовка access-control-allow-origin - дажепосле нескольких часов ожидания.

Выполнение команды gsutil с флагом -DD выдает следующее:

gsutil version: 4.33
checksum: 4d4290f4916b57b9412f338cbed076b0 (OK)
boto version: 2.48.0
python version: 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
OS: Windows 10
multiprocessing available: False
using cloud sdk: True
pass cloud sdk credentials to gsutil: True
config path(s): C:\Users\trbor.DESKTOP-RNB44N2\.boto, C:\Users\trbor.DESKTOP-RNB44N2\AppData\Roaming\gcloud\legacy_credentials\[removed]\.boto
gsutil path: E:\Programme\Google Cloud SDK\google-cloud-sdk\platform\gsutil\gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
Command being run: E:\Programme\Google Cloud SDK\google-cloud-sdk\platform/gsutil\gsutil -o GSUtil:default_project_id=[removed] -DD cors set cors.json gs://[removed]
config_file_list: ['C:\\Users\\trbor.DESKTOP-RNB44N2\\.boto', 'C:\\Users\\trbor.DESKTOP-RNB44N2\\AppData\\Roaming\\gcloud\\legacy_credentials\\[removed]\\.boto']
config: [('debug', '0'), ('working_dir', '/mnt/pyami'), ('https_validate_certificates', 'True'), ('debug', '0'), ('working_dir', '/mnt/pyami'), ('content_language', 'en'), ('default_api_version', '2'), ('default_project_id', '[removed]')]
Setting CORS on gs://[removed]/...
DEBUG 1025 13:40:46.068000 multiprocess_file_storage.py] Read credential file
INFO 1025 13:40:46.069000 base_api.py] Calling method storage.buckets.patch with StorageBucketsPatchRequest: <StorageBucketsPatchRequest
 bucket: u'[removed]'
 bucketResource: <Bucket
 acl: []
 cors: [<CorsValueListEntry
 maxAgeSeconds: 3600
 method: [u'GET', u'HEAD', u'DELETE']
 origin: [u'http://localhost:4200', u'file://']
 responseHeader: [u'Content-Type']>]
 defaultObjectAcl: []>
 projection: ProjectionValueValuesEnum(noAcl, 1)>
INFO 1025 13:40:46.077000 base_api.py] Making http PATCH to https://www.googleapis.com/storage/v1/b/[removed]?fields=id&alt=json&projection=noAcl
INFO 1025 13:40:46.077000 base_api.py] Headers: {'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '156',
 'content-type': 'application/json',
 'user-agent': 'apitools gsutil/4.33 Python/2.7.13 (win32) google-cloud-sdk/211.0.0 analytics/disabled'}
INFO 1025 13:40:46.078000 base_api.py] Body:
{"cors": [{"origin": ["http://localhost:4200", "file://"], "responseHeader": ["Content-Type"], "method": ["GET", "HEAD", "DELETE"], "maxAgeSeconds": 3600}]}
connect: (www.googleapis.com, 443)
send: 'PATCH /storage/v1/b/[removed]?fields=id&alt=json&projection=noAcl HTTP/1.1\r\nHost: www.googleapis.com\r\ncontent-length: 156\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools gsutil/4.33 Python/2.7.13 (win32) google-cloud-sdk/211.0.0 analytics/disabled\r\ncontent-type: application/json\r\nauthorization: [removed] \r\n\r\n{"cors": [{"origin": ["http://localhost:4200", "file://"], "responseHeader": ["Content-Type"], "method": ["GET", "HEAD", "DELETE"], "maxAgeSeconds": 3600}]}'
reply: 'HTTP/1.1 200 OK\r\n'
header: X-GUploader-UploadID: AEnB2UoC-bJCCHHy9jBSIrIBR1bNR7hElTbzru0pj8kNxaBmh_lfJ_Ww6BFN5_fgH4-ZUai1AZ97yDVEU0gzALMktN80tapE6g
header: ETag: CBE=
header: Vary: Origin
header: Vary: X-Origin
header: Content-Type: application/json; charset=UTF-8
header: Cache-Control: no-cache, no-store, max-age=0, must-revalidate
header: Pragma: no-cache
header: Expires: Mon, 01 Jan 1990 00:00:00 GMT
header: Date: Fri, 25 Oct 2019 11:40:51 GMT
header: Content-Length: 40
header: Server: UploadServer
header: Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
INFO 1025 13:40:47.043000 base_api.py] Response of type Bucket: <Bucket
 acl: []
 cors: []
 defaultObjectAcl: []
 id: u'[removed]'>
...