Firebase存储和访问控制允许原点

Bla*_*sad 56 cors google-cloud-storage firebase firebase-storage

我正在尝试通过XMLHttpRequest从Firebase存储下载文件,但资源上没有设置Access-Control-Allow-Origin,因此无法实现.有没有办法在存储服务器上设置此标头?

  (let [xhr (js/XMLHttpRequest.)]
    (.open xhr "GET" url)
    (aset xhr "responseType" "arraybuffer")
    (aset xhr "onload" #(js/console.log "bin" (.-response xhr)))
    (.send xhr)))
Run Code Online (Sandbox Code Playgroud)

Chrome错误消息:

XMLHttpRequest无法加载 https://firebasestorage.googleapis.com/[EDITED] 请求的资源上没有"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:3449 "因此不允许访问.

Jef*_*D23 120

Google Cloud 现在有一个内联编辑器,可以让这个过程变得更加简单。无需在本地系统上安装任何东西。

  1. 打开GCP 控制台并通过单击>_顶部导航栏中的图标按钮启动云终端会话。
  2. 单击铅笔图标打开编辑器,然后创建cors.json文件。
  3. gsutil cors set cors.json gs://your-bucket

在此处输入图片说明

  • 是否需要等待时间?我将 origin 设置为“*”,但它仍然抱怨 Access to fetch at 'https://firebasestorage.googleapis.com/...' from origin 'https://....stackblitz.io' 已被 CORS 阻止策略:无“访问控制允许来源” (5认同)
  • 它是右上角导航中的图标,看起来像“>_” (3认同)
  • 成功了!谢谢。我必须说,如果它是由 firebase 存储本身控制的,也许在规则下,这可能会简单得多?!#google #firebase 这里有一个增强用户体验的机会。 (2认同)

Fra*_*len 109

firebase-talk组/列表上的这篇文章:

为CORS配置数据的最简单方法是使用gsutil命令行工具.有关安装说明,gsutil请访问https://cloud.google.com/storage/docs/gsutil_install.一旦安装gsutil并使用它进行身份验证,就可以使用它来配置CORS.

例如,如果您只想允许从自定义域下载对象,请将此数据放在名为cors.json的文件中(替换"https://example.com"为您的域):

[
  {
    "origin": ["https://example.com"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]
Run Code Online (Sandbox Code Playgroud)

然后,运行此命令(替换"exampleproject.appspot.com"为您的存储桶的名称):

gsutil cors set cors.json gs://exampleproject.appspot.com
Run Code Online (Sandbox Code Playgroud)

你应该被设定.

如果您需要更复杂的CORS配置,请查看https://cloud.google.com/storage/docs/cross-origin#Configuring-CORS-on-a-Bucket上的文档.

  • 如果您不想安装util,一个方便的方法是访问https://console.cloud.google.com/home并点击右上角的"激活Google Cloud Shell".这将打开一个已安装gsutil的shell,并可访问您的firebase存储项目.(在shell中我使用pico创建了一个json,然后如上所述,`gsutil cors设置了myjson.json gs:// projectname.appspot.com`) (25认同)
  • @ user1311069只使用``origin':["*"],`而不是``origin":["https://example.com"],` (8认同)
  • Firebase确实需要找出一种用户友好的方式来做到这一点.在实际的Firebase数据库上设置权限并不是令人沮丧的,也不是设置S3存储桶权限.此时对S3的强烈偏好. (6认同)
  • 有没有办法允许所有来源类似于Access-Control-Allow-Origin:*? (4认同)
  • 如何找到我的火力桶的确切名称? (4认同)
  • 对于本地主机,请在源列表中包含“http://locahost:port”,例如 [“http://sitename.com”、“http://localhost:4200”] (3认同)
  • @isuru你应该创建一个名为*cors.json*的文件,然后运行命令`gsutil cors set cors.json gs:// exampleproject.appspot.com`. (2认同)
  • 我同意@MattJensen Firebase应该允许通过控制台配置cors。另一个要点是配置文件版本控制,这也需要使用`gsutil`。 (2认同)
  • 我尝试了这个解决方案,但我没有得到应该下载的文件。 (2认同)
  • 如何为本地主机配置它? (2认同)

Aak*_*ash 11

只想添加到答案。只需在Google控制台(console.cloud.google.com/home)中转到您的项目,然后选择您的项目即可。在那里打开终端,仅创建cors.json文件(touch cors.json),然后按照答案进行操作并按照vim cors.json@ frank-van-puffelen的建议编辑此文件()

这对我有用。干杯!

  • ...打开终端并...如何打开终端?我在链接上看不到“打开终端”按钮 (3认同)
  • 确保您位于“cloud”子域,而不是“firebase”子域(“console.cloud.google.com/home”),然后查找右上角的“>_”图标按钮。 (2认同)

小智 11

我正在开发一个使用 firebase 存储的项目,最终用户需要一种方法来下载他们上传的文件。当用户尝试下载文件时,我遇到了 cors 错误,但经过一些研究,我解决了这个问题。我是这样想出来的:

  1. 下载 Google 云 CLI
  2. 使用 CLI 登录
  3. 在项目目录中创建 cors.json 文件并输入以下代码。
[
  {
    "origin": ["*"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]
Run Code Online (Sandbox Code Playgroud)
  1. 使用 Google Cloud CLI 导航到包含 cors.json 的目录
  2. 在 CLI 中输入:gsutil cors set cors.json gs://<app_name>.appspot.com