【问题标题】:request.auth != null and request.auth == null give no access, where true does - firebase stoargerequest.auth != null 和 request.auth == null 不提供访问权限,其中 true 提供 - firebase 存储
【发布时间】:2021-10-28 05:50:24
【问题描述】:

我正在使用 AngularFire 和 Firebase 8.10.0 访问存储中的文件(要在 IMG 中使用的头像图像 - 所以是 URL)。

编辑:失败的代码 - 获取文件是通过

<img [src]='user.photoURL'>

这会导致 403 GET 错误:

images%2FIFjwtbvRjwbeIVYJlCYuHMdhfTA3%2FphotoURL.jpg:1 GET https://firebasestorage.googleapis.com/v0/b/kuyua-2199c.appspot.com/o/images%2FIFjwtbvRjwbeIVYJlCYuHMdhfTA3%2FphotoURL.jpg?alt=media&token=e2d7e4ac-477b-4e79-8f7b-ece826f9b67a 403

以及给出的网址:

   {
      "error": {
        "code": 403,
        "message": "Permission denied. Could not perform this operation"
      }
    }

Firebase 存储规则是:

rules_version = '2';
service firebase.storage {
 match /b/{bucket}/o {
 
    match /images/{userId}/{imageId} {
      allow write: if request.resource.size < 0.5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*')
                   && request.auth.uid == userId;
      allow read:  if  request.auth != null;
    }
 }
}

一些尝试:

  1. 如果我更改为以下内容,则 URL 会完美加载:

    允许读取:如果为真;

知道之前关于 auth 和 rules 的问题,我想知道 null 测试是否可行,但这也不会产生任何结果

allow read:  if  request.auth == null;

使用模拟器,规则正常运行。

  1. 再试一次:

一探究竟

https://firebasestorage.googleapis.com/v0/b/kuyua-2199c.appspot.com/o/images%2FIFjwtbvRjwbeIVYJlCYuHMdhfTA3%2FphotoURL.jpg?alt=media&token=84138d8a-b608-45d3-8f17-f9d22d24ae04

是否给出了图片,让我想知道它实际上是改变行为的令牌(这是两个 url 之间的唯一区别)?那么,我的问题是如何关联到 Firebase 规则?

有人知道吗?

汤姆 (ps。写这篇文章的时候,我想我可能需要弄清楚为什么它对产品有用,但对头像不起作用,不过,欢迎大家帮忙)

【问题讨论】:

  • 规则本身不做任何事情,所以我建议编辑你的问题以显示失败的最小代码。在这种情况下,在加载图像之前,我建议记录当前用户的 UID,因为这很可能是问题所在。
  • 谢谢@FrankvanPuffelen。我编辑了这个问题。我认为我收到了错误,因为 downloadURL 上的令牌已更改。如果规则说“允许读取:如果为真”,是否会影响 firebase 查看令牌的方式? (正如你所说,规则不做任何事情)。让我也想知道request.auth的内容。我不确定是否可以检查那个。谢谢你的帮助。现在的规则是:允许读取:if imageId == "photoURL.jpg";效果很好

标签: javascript firebase-storage firebase-security angularfire


【解决方案1】:

下载 URL 提供对基础文件的公共只读访问权限。因此,通过下载 URL 访问 Cloud Storage 中的图像,不会导致检查安全规则。

如果工作 URL 和非工作 URL 之间的唯一区别在于其中的 token,则很可能是通过 Firebase 控制台撤销了非工作 URL 的令牌。

【讨论】:

  • 谢谢。如果您说 downloadURL 不会导致检查安全规则,我仍然想知道为什么当我在规则中检查 auth 时会收到损坏的 url,而当我将其设置为“允许读取:始终为真”时,链接有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2018-09-07
  • 2017-07-11
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多