【问题标题】:Firebase Storage Wildcard RulesFirebase 存储通配符规则
【发布时间】:2018-08-03 22:08:37
【问题描述】:

我目前正在使用 NodeJS、HTML 和 Firebase 为数据库服务、身份验证和存储编写一个网站。我目前遇到的问题是,根据我对文档的解释,Firebase 存储规则不起作用。

我的 Firebase 存储实例的目录结构如下(显然是假的 uid):

/
└─ users/
   ├─ a67dhfa7dhf96/
   │   ├─ picture.jpg
   │   └─ private/
   │       └─ privateDetails.txt
   └─ h9dh91hf7edgn/
       ├─ picture.jpg
       └─ private/
           └─ privateDetails.txt

我想使存储在不同用户文件中的文件无论是否经过身份验证都可以被任何用户读取,然后使私有文件夹中的文件仅对登录用户可用。我当前的 Firebase 存储规则如下所示:

service firebase.storage {
    match /b/{bucket}/o {
        match /users/{userId} {
            match /* {
                allow read;
            }
            match /private {
                allow read, write: if request.auth != null;
            }
        }
    }
}

使用这些规则,我总是在任何文件上得到 403:“权限被拒绝。无法执行此操作”,而无需使用 Firebase 存储提供的自定义下载令牌,无论文件是否位于私有目录中。我还尝试了以下规则,也导致每个文件都出现 403。

service firebase.storage {
    match /b/{bucket}/o {
        match /users/{userId}/* {
            allow read;
        }
        match /users/{userId}/private {
            allow read, write: if request.auth != null;
        }
    }
}

为什么这些规则集不能正常工作?

【问题讨论】:

    标签: firebase firebase-storage firebase-security


    【解决方案1】:

    您应该使用wildcards 来匹配/users/{userId}/*

    service firebase.storage {
        match /b/{bucket}/o {
            match /users/{userId} {
                match /{imageId}{
                  allow read;
                }
                match /private/{imageId}{
                  allow read, write: if request.auth != null;
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2016-11-07
      • 2021-01-03
      • 2020-11-28
      相关资源
      最近更新 更多