javascript - 即使测试表明它们确实有效,firestore 规则也不起作用
问题描述
问题:当我使用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 分钟)
- 从中等帖子复制粘贴的规则,做了我想要的(仍然没有工作)
解决方案
规则中allow read;
没有任何条件的 相当于allow read: if true;
,因此它允许任何人读取所有数据。
如果你想阻止任何人读取数据,那就是:
allow read: if false;
如果您只希望经过身份验证的用户读取数据,那就是:
allow read: if request.auth != null;
推荐阅读
- linux - 如何使用 awk 去除输出的最后一列字符?
- android - 如何加载这个html并将值发送到webview android中的post方法
- amp-html - 如何使用 amp-script 提交表单并每 X 秒从服务器获取数据
- excel - 如何加快 VBA 复制和插入代码
- c# - 转换为值类型“System.Boolean”失败,因为具体化值为 null
- javascript - 使用 javascript json 字符串和数组,以及本地存储
- python - macOS:PyQt5 与 opencv-python 冲突
- tsql - 按排名函数中的日期分组
- swiftui - SwiftUI NavigationLink 按钮是灰色且不可触摸
- mysql - 为什么在 laravel 项目中出现以下查询错误?