如何使文档的字段成为firebase中的主键



所以我想防止将具有相同email字段的文档添加到firestore数据库中。这在身份验证中是自动的,但在firestore中不是。

这是我的基本功能:

const register = async () => {
await addDoc(userCollectionRef, {username: userName, email: newUser, password: registerPassword})
try {
const user = await createUserWithEmailAndPassword(auth, newUser, registerPassword);
console.log(user);
} 
catch(e) {
console.log(e.message);
console.log(e.code);
if((e.code) === "auth/email-already-in-use"){
window.alert("Email already registered");
}
}

}

我应该怎么做才能使电子邮件字段成为主键?

Firestore没有主键的概念。最接近的等价物是文档ID。

如果要指定自己的文档ID,请使用带有文档引用的setDoc,而不是addDoc:

const userDocRef = doc(userCollectionRef, newUser)
await setDoc(docRef, {username: userName, email: newUser, password: registerPassword})

另请参阅有关编写文档的Firebase文档。

您应该在使用电子邮件和密码创建用户后使用firebase进行编写。

const register = async () => {

try {
const user = await createUserWithEmailAndPassword(auth, newUser, registerPassword).then(() => await addDoc(userCollectionRef, {username: userName, email: newUser, password: registerPassword})) ;
console.log(user);
} 
catch(e) {
console.log(e.message);
console.log(e.code);
if((e.code) === "auth/email-already-in-use"){
window.alert("Email already registered");
}
}

}

正如Frank上面提到的,要实现您的目的,您无法使用sdk中的FirebasecreateUser函数。如果用户已经创建,它将抛出一个错误,并且不会触发将文档写入firebase。

最新更新