【问题标题】:How to enforce users to only upload files to certain nodes for particular files in Firebase.如何强制用户仅将文件上传到 Firebase 中特定文件的特定节点。
【发布时间】:2016-10-21 13:34:01
【问题描述】:

我正在尝试使用 firebase 存储,查看授权用户可以从 Web 客户端上传文件,我想知道是什么阻止了用户通过调整 javascript 来更改路径。

考虑以下事项

我想按如下方式组织用户文件。

root : {
     users :
            uid1 : images {}
                 : audio {}
    -users:
            uid2 : images {}
                 : audio {} 
    -users:
          : uid3 : images {}
                 : audio {} 
     }

然后上传一张图片到/userid/images/

        var storage     = firebase.storage();
        var storageRef  = storage.ref();
        var imagesRef   = storageRef.child(uid_g).child('images').child(path);

问题:

是什么阻止了用户将 child('images') 更改为 child('audio')

我只是想确保我设置的路径不会在存储上更改。

服务器上的规则我只允许用户读取和写入他们的数据。

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

【问题讨论】:

    标签: javascript firebase firebase-authentication firebase-security firebase-storage


    【解决方案1】:

    您可以继续使用安全规则来创建更多路径限制:

    service firebase.storage {
      match /b/<your-firbase-storage-bucket>/o {
        match /user/{userId} {
          match /images {
            // This will match only /user/{userId}/images
            allow read, write: if imageCondition();
          }
          match /audio {
            // If you don't want the user to change to audio, you can either say if false or just don't include this path
            allow read, write: if audioCondition();
          }
        }
      }
    }
    

    【讨论】:

    • 要明确一点,服务器上正在检查哪个 UserId?在 javascript 上有“firebase.auth().currentUser.u”和“firebase.auth().onAuthStateChanged(function(user)”,其中“user.uid”给出了另一个,但它们不一样。
    • 除非您刚刚更改了身份验证状态(升级匿名帐户、登录/注销等),否则这些应该不会有所不同。如果您在onAuthStateChanged 中调用firebase.auth().currentUser.uid,我希望它匹配user.uid,这不会发生吗?
    • 不,它们是不同的,只是在不同的用户身上尝试过。 “firebase.auth().currentUser.u”和“firebase.auth().currentUser.uid”也不同。
    • 你的意思是firebase.auth().currentUser.u 还是firebase.auth().currentUser.uid(你输入了两次u,所以我不确定)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2019-02-02
    • 2021-04-27
    • 1970-01-01
    • 2022-11-28
    • 2023-03-18
    相关资源
    最近更新 更多