firebase - Firestore 拒绝在具有完全开放安全规则的 Web Worker 中添加操作(Web 应用程序)
问题描述
因此,我设置了以下 Web Worker 以将数据添加到 Firestore 集合。
Web Worker 代码的第一部分初始化 Firebase 并获取一些引用
importScripts("https://www.gstatic.com/firebasejs/8.3.1/firebase-app.js");
importScripts("https://www.gstatic.com/firebasejs/8.3.1/firebase-auth.js");
importScripts("https://www.gstatic.com/firebasejs/8.3.1/firebase-firestore.js");
// firebase configuration object
const firebaseConfig = {
apiKey: "XXX",
authDomain: "XXX",
projectId: "XXX",
storageBucket: "XXX",
messagingSenderId: "XXX",
appId: "XXX"
};
// initialize firebase
firebase.initializeApp(firebaseConfig);
// get reference to db
const db = firebase.firestore();
// get reference to collection
const collection = db.collection("data");
以下函数在网络工作者内部执行实际上传(至少在我的意图中)
// function to handle document upload to firestore
const uploadData = async document => {
// try to
try {
// sign in anonymously to firebase
await firebase.auth().signInAnonymously();
// upload document
const docRef = await collection.add(document);
// output docRef to console
console.log(docRef);
// signout
firebase.auth().signout();
}
// on error
catch(error) {
// output error to console
const errorCode = error.code;
const errorMessage = error.message;
console.log(error, errorCode, errorMessage);
};
};
最后,这是启动 web worker 的事件监听器:
// event handler
onmessage = async function(e) {
// cache data
const workerData = e.data;
// upload data to firestore
await uploadData(workerData);
// send upload finished
postMessage("upload finished");
};
Firestore 规则是完全开放的(仅用于测试目的):
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
尽管如此,当我的网络工作者运行时,我在控制台中收到以下错误:
"permission-denied" "Missing or insufficient permissions"
我做错了什么?
解决方案
出于某种奇怪的原因,在当前的 firebase 项目中,配置对象缺少道具“databaseURL”。我删除了项目,创建了一个新项目,代码按预期工作。事实上,新的 firebase 配置对象正确设置了“databaseURL”属性。
推荐阅读
- c++ - 难以计算小数字
- python - 尝试使用 RPi 摄像头并通过电报机器人打开 LED。无法让 LED 工作
- ios - 使用 Objective-C 代码在 Swift 中呈现视图?
- python - 使用 GeoPandas 将坐标列表转换为多边形
- java - 如何从除主要活动之外的类中编辑动态添加的按钮
- c# - Linq 查询和潜在的自我加入/分组依据
- python - 在 python 中,将 unix 时间戳转换为日期和时间时出错。操作系统错误 #22
- python - 为什么 matplotlib 'key_press_event' 这么慢
- dns - 将 domain.com:1234 的特定端口转发到不同的 IP
- c# - 为什么我的数学不适用于我的 SQL Server 数据库?