首页 > 解决方案 > 即使测试表明它们确实有效,firestore 规则也不起作用

问题描述

问题:当我使用firestore请求模拟器时,它可以按我想要的方式工作,但是当我通过我的应用程序对其进行测试时,即使我没有经过身份验证,它也可以让我发出创建请求。请注意,我正在使用 react、easy peasy 状态管理和 firebase spark 计划。

代码

提交到数据库:

componentDidMount() {
    try {
      this._db = firebase.firestore();
      this._db
        .collection("txts")
        .limit(50)
        .orderBy("timeMade", "asc")
        .onSnapshot((querySnapshot) => {
          this.setState({ messages: [] });
          querySnapshot.forEach((doc) => {
            this.setState({
              messages: [...this.state.messages, doc.data().txt],
            });
          });
        });
    } catch (err) {
      alert("Must sign in first!");
    }
  }
  uploadData = (e) => {
    e.preventDefault();
    if (this.state.m.trim()) {
      this._db.collection("txts").add({
        txt: this.state.m,
        timeMade: Date.now(),
      });
      this.setState({ m: "" });
    }
  };

我尝试过的事情:

标签: javascriptfirebasegoogle-cloud-firestorefirebase-authenticationfirebase-security

解决方案


规则中allow read;没有任何条件的 相当于allow read: if true;,因此它允许任何人读取所有数据。

如果你想阻止任何人读取数据,那就是:

allow read: if false;

如果您只希望经过身份验证的用户读取数据,那就是:

allow read: if request.auth != null;

推荐阅读