【问题标题】:Firebase storage rule for authenticated user not working经过身份验证的用户的 Firebase 存储规则不起作用
【发布时间】:2019-03-31 05:02:54
【问题描述】:

当我打开 Firebase 存储桶并转到文件时,我的文件夹结构如下:

/<environment>/reports/<userId>/

我希望只允许经过身份验证的userId 读取、写入该用户文件夹中的报告。

我尝试了以下操作,但它给了我访问被拒绝的消息。我究竟做错了什么?我几乎一对一地复制了 docs 中的示例。

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "<ENVIRONMENT>/reports/<UID>/path/to/file.txt"
    match /production/reports/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

【问题讨论】:

    标签: firebase firebase-storage


    【解决方案1】:

    您可以使用Firebase Storage Console 中的规则模拟器来测试您的规则。我已经测试了你的,它们似乎工作正常:

    您需要记住指定最终节点名称,例如 /production/reports/{userId}/test 以使规则生效,因为 /{allPaths=**} 它将匹配存储桶文件名而不是父目录。

    【讨论】:

    • 我看到您尝试使用匿名身份验证。我有一个用户通过具有特定 ID 的电子邮件进行身份验证。您是否尝试过使用随机 userId 创建文件夹?
    • 它应该适用于任何身份验证方法 - 我也使用“密码”方法进行了测试,并且模拟器允许写入访问,除非 {userId} 和 Firebase UID 不匹配。
    • 似乎确实在模拟器中我必须访问路径/production/reports/user1/PATHNAME而不是我尝试过的根目录/production/reports/user1
    猜你喜欢
    • 2018-10-10
    • 2016-10-17
    • 2023-03-21
    • 1970-01-01
    • 2019-03-06
    • 2021-09-11
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多