尽管更改了数据库规则,但将文件上传到Firebase存储仍会返回403错误

时间:2020-04-07 11:11:14

标签: javascript firebase google-cloud-storage firebase-security

我正在使用HTML和JS创建一个基本网页以将gif上传到我的Firebase存储中。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
    <head>
    <meta charset="UTF-8" />
    <title>Upload gifs</title>
  </head>
  <body>
    <progress value="0" max="100" id="uploader">0%</progress>
    <input type="file" valu="upload" id="fileButton"></input>

  </body>
    <script src="https://www.gstatic.com/firebasejs/7.7.0/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/7.7.0/firebase-storage.js"></script>

    <script>
        var firebaseConfig = {
          apiKey: "",
          authDomain: "",
          databaseURL: "",
          projectId: "",
          storageBucket: "",
          messagingSenderId: "",
          appId: "",
          measurementId: ""
        };
    firebase.initializeApp(firebaseConfig);
    console.log(firebase);

    var uploader = document.getElementById('uploader');
    var fileButton = document.getElementById('fileButton');

    fileButton.addEventListener('change', function(e){
      var file = e.target.files[0];

      var storageRef = firebase.storage().ref('gifs/' + "123");

      storageRef.put(file);

      task.on('state_changed', 
        function progress(snapshot) {
            var percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            uploader.value = percentage;
        }
        ,
        function error(err) {

        }

      )
  })

    </script>
</html>

我的firebase数据库的规则是:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    match /{document=**} {
      allow read, write: if true;
    }
  }
}

尽管如此,当我运行代码时,它返回403错误并指出其被禁止。我不确定为什么更改了规则以允许访问数据库,但是我仍然遇到问题。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在将Cloud Firestore(由Firebase提供的数据库服务之一)的安全规则与Cloud Storage的规则混合在一起。

您将在此处找到有关Cloud Storage安全规则的文档:https://firebase.google.com/docs/storage/security

在您的情况下,由于从您的问题来看,您似乎想允许任何人进行读写,因此您应按以下方式编写云存储规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}