繁体   English   中英

Firebase - 即使没有添加文档,addDoc() 也返回成功

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM