【问题标题】:Firebase storage: Unable to download files uploaded via Ruby APIFirebase 存储:无法下载通过 Ruby API 上传的文件
【发布时间】:2018-10-06 13:17:16
【问题描述】:

我正在使用 google-cloud-storage 服务将文件从我的 Ruby on Rails 应用上传和下载到 Firebase 存储(我正在与之交互的另一个应用的一部分)。

使用 Firebase 服务帐户部分中的 JSON 密钥,上传工作完美。我正在上传这样的文件:

STORAGE = Google::Cloud::Storage.new(
    project_id: "blah",
    credentials: File.join(Rails.root, 'config', 'firebase-auth.json')
)

BUCKET = STORAGE.bucket DEFAULT_BUCKET_ID

...

file_on_firebase = BUCKET.create_file(file_path.to_s, firebase_path, acl: "public_read")

我可以在 Firebase 存储控制台中看到上传的文件,但是当我尝试通过控制台下载它们时,我在浏览器的控制台中收到以下错误:

uncaught exception: CustomError: Error in protected function: Firebase Storage: 
User is not authenticated, please authenticate using Firebase Authentication and try again.

这很奇怪,因为我访问 Firebase 控制台的帐户是主服务帐户,我可以下载其他(手动上传的)文件没问题。我唯一无法下载的是从我的 Rails 应用程序上传的那些。

有什么想法吗?我认为它必须与将fileacl 属性设置为public_read 有关。但是,不确定为什么会阻止从控制台下载文件。看来我可以使用他们的public_url 访问文件。

【问题讨论】:

  • 我做了一些快速检查,我唯一能想到的可能是该用户由于某种原因对该特定存储桶/文件夹没有正确的 IAM 权限。你检查过这些吗?
  • 我用于登录 Firebase 控制台的帐户被标记为项目的“所有者”。但是,它没有标记为服务帐户。也许这就是问题所在?

标签: ruby-on-rails ruby firebase google-cloud-storage firebase-storage


【解决方案1】:

您是否更改了存储规则?进入存储,然后进入 Firebase 控制台(网络)中的规则并查看您的规则。

如果你有这个:

allow read: if request.auth != null;

意味着用户应该通过身份验证才能读取文件。

将此用于更多安全规则实践。

【讨论】:

  • 看起来我的规则设置为允许读取,即使没有身份验证:allow read;allow write: if request.auth != null;
  • 您的规则说用户应该通过身份验证才能读取文件。尝试将规则从“if request.auth != null”更改为“if request.auth === null”
猜你喜欢
  • 2021-01-06
  • 1970-01-01
  • 2020-11-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
相关资源
最近更新 更多