Firebase 存储通配符规则

Bla*_*ved 5 firebase firebase-security firebase-storage

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

\n\n

我的 Firebase 存储实例的目录结构如下(明显带有假 uid):

\n\n
/\n\xe2\x94\x94\xe2\x94\x80 users/\n   \xe2\x94\x9c\xe2\x94\x80 a67dhfa7dhf96/\n   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80 picture.jpg\n   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80 private/\n   \xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80 privateDetails.txt\n   \xe2\x94\x94\xe2\x94\x80 h9dh91hf7edgn/\n       \xe2\x94\x9c\xe2\x94\x80 picture.jpg\n       \xe2\x94\x94\xe2\x94\x80 private/\n           \xe2\x94\x94\xe2\x94\x80 privateDetails.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
service firebase.storage {\n    match /b/{bucket}/o {\n        match /users/{userId} {\n            match /* {\n                allow read;\n            }\n            match /private {\n                allow read, write: if request.auth != null;\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
service firebase.storage {\n    match /b/{bucket}/o {\n        match /users/{userId}/* {\n            allow read;\n        }\n        match /users/{userId}/private {\n            allow read, write: if request.auth != null;\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么这些规则没有发挥应有的作用?

\n

Ros*_*des 1

您应该使用通配符来匹配/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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)