【问题标题】:firestore rules not working even though test said they did即使测试表明它们确实有效,firestore 规则也不起作用
【发布时间】:2020-07-18 18:58:43
【问题描述】:

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

代码

  • 规则

    rules_version = '2';
      service cloud.firestore {
        match /databases/{database}/documents {
    
          match /{document=**} {
            allow write: if request.auth != null;
            allow read;
          }
        }
      }
    

提交到数据库:

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: "" });
    }
  };

我尝试过的事情:

  • 我已经等了 1 分钟(据说最多等 1 分钟)
  • 从中型帖子中复制粘贴的规则,符合我的要求(仍然无效)

【问题讨论】:

标签: javascript firebase google-cloud-firestore firebase-authentication firebase-security


【解决方案1】:

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

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

allow read: if false;

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

allow read: if request.auth != null;

【讨论】:

  • “它不起作用”很难解决。但这相当简单:根据上述规则,来自非管理人员(因此不使用 Admin SDK)的未经身份验证的写入被拒绝。如果您的写入被允许,您要么已通过身份验证,要么是管理用户,要么写入具有不同规则的项目。我建议尝试一一消除这些选项。例如:console.log(firebase.auth().currentUser) 就在读/写之前会显示用户是否登录\。
  • 非常感谢!我以为我没有通过身份验证,但是当我在隐身模式下尝试时,它运行良好!!!!
猜你喜欢
  • 2019-05-26
  • 2019-06-03
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2019-01-31
  • 2019-12-14
  • 2019-01-31
相关资源
最近更新 更多