![](/img/trans.png)
[英]Firebase 9, Remix: addDoc() returns "PERMISSION DENIED" error
[英]Firebase - addDoc() returns success even when no document was added
Firebase 的新手。我有一个基本的 React 表单,它接受用户的 email 并使用 addDoc() 将其发送到 Firestore。
import { initializeApp } from "firebase/app";
import { getFirestore } from "@firebase/firestore"
const firebaseConfig = {
...
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const db = getFirestore(app)
const emailsCollectionRef = collection(db, "emails");
const addEmail = async (data: { email: string; }) => {
console.log("Sending data to firebase");
try {
const result = await addDoc(emailsCollectionRef, {email: data!.email});
console.log("Document written with ID: ", result.id);
} catch (e) {
console.error("Error adding document: ", e);
}
}
当我在 try catch 中使用 addDoc() 传递用户的输入时,我在控制台中得到了这个
Sending data to firebase
Document written with ID: YFPaCvSjeBssvUAtdqSh
这很好,但是如果我故意尝试让它失败,例如更改emailsCollectionRef中的集合名称,例如
const emailsCollectionRef = collection(db, "NoSuchCollection");
并再次运行 function 我得到相同的成功消息。
在 Firebase 文档中,它说 addDoc()
退货:
承诺<DocumentReference<T>>
Promise 在写入后端后使用指向新创建文档的 DocumentReference 解析(请注意,它不会在您离线时解析)。
在 DocumentReference 下它说
DocumentReference 指的是 Firestore 数据库中的文档位置,可用于写入、读取或收听该位置。 引用位置的文档可能存在也可能不存在。
如果我想检查写入是否成功,我必须忽略 DocumentReference 并在使用 addDoc() 后立即执行单独的查询以查看该 ID 是否确实存在。
我的问题是,是否有更好的方法来检查写入是否真的成功,因为 DocumentReference 显然不可信?
Collections 是在您将第一个文档写入 is 时自动创建的,因此您对不存在的集合的addDoc
调用很可能实际上创建了该集合。
如果你想防止这种情况,你只能允许写入特定的,已知的 collections 在你的数据库的安全规则中,这是在服务器上强制执行的。 此时,addDoc 返回的addDoc
也将拒绝/失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.