我可以通过简单地命名与我的域名相同的名称然后将CNAME记录指向c.storage.googleapis.com来获取映射到我的Firebase存储桶的自定义域名。但是,https不起作用,因为证书上的公用名是不同的。我是否可以上传证书,或者更好的是,让GCP或Firebase管理证书?
答案 0 :(得分:2)
我来晚了一点,这个问题可能已经在其他地方回答了。但是,由于这是我在谷歌搜索该功能时发现的第一个结果,因此什么也没做:
对于初学者来说,假设您有一个assets.somedomain.com
指向c.storage.googleapis.com
的CNAME,并且创建了一个名为assets.somedomain.com
的存储桶。
然后,您上传一个文件,该文件的公共网址如下:
https://firebasestorage.googleapis.com/v0/b/assets.somedomain.com/o/arduino.png?alt=media&token=asdf
可以看作是:
firebasestorage.googleapis.com/v0/b/
+
assets.somedomain.com
+
/o/
+
arduino.png?alt=media&token=asdf
您应该能够使用以下命令查看该文件:
https://assets.somedomain.com/arduino.png?alt=media&token=asdf
哪个
assets.somedomain.com/
+
arduino.png?alt=media&token=asdf
(基本上,您会删除原始基本URL和/o/
前缀)
但是,您当然会收到一条警告,告诉您证书无效,因为它是*.storage.googleapis.com
的意思。
就我而言,我能够使用cloudflare的通用SSL来规避此问题,它的作用就像是一个不问任何问题的代理。
您再试一次,但是在中间的某个地方,请求变为匿名,并且您得到一个XML,指出您缺少storage.objects.get权限。
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous users does not have storage.objects.get access to object.
</Details>
</Error>
这意味着即使查询字符串中包含令牌,代理请求也没有权限。然后,下一步是使存储桶在Google Cloud Console -> Storage
中公开可读。
(这可以使用gcloud cli来完成,但是我发现这种方法更容易解释)
请注意使用旧版对象读取器权限,这会阻止访问者实际列出存储桶内容。
在那之后,您应该能够使用:
https://assets.somedomain.com/arduino.png
请注意,您甚至不需要包括“ alt = media”,因为cloudflare将提供文件而不是其元数据。
答案 1 :(得分:1)
我完全同意之前的回答,对此非常感谢。但是我正在以更好的方式编写指令
使用您在Google Cloud Platform->存储中的自定义域名创建存储桶。
创建旧版对象查看器的权限并将其添加到所有用户。注意:您必须从过滤器文本中搜索旧版对象查看器
在具有CNAME资产的域名服务提供商帐户中添加DNS记录,该记录将指向c.storage.googleapis.com。
如果没有,请创建一个cloudflare帐户
在cloudflre中添加网站,您需要在其中放置域名而不是子域 将名称服务器详细信息从cloudflare复制到您的DNS服务提供商名称服务器详细信息
将所有dns记录移至cloudflare中将花费一些时间。
在cloudflare中转到页面规则并添加asset.yourdomain.com并打开始终使用https
您完成了
答案 2 :(得分:1)
Firebase 8.4.0 introduces storage().useEmulator(host, port)
。
您仍然需要一个反向代理,您可以使用 Google Cloud Load Balancer 或其他工具来实现。
答案 3 :(得分:0)
目前,我们不支持Cloud Storage for Firebase中的自定义域。
您有两种选择:
在任何一种情况下,您都将失去使用Firebase SDK进行云存储的功能,以及它的身份验证和授权功能。
很高兴了解有关用例的更多信息,看看我们是否应该支持这些用例。