概述
我正在使用Firestore作为数据库和身份验证服务创建一个react-native应用程序。我目前允许用户使用createUserWithEmailAndPassword
创建帐户,这是成功的。我使用返回的UID
在我的数据库中创建一个具有相同UID的文档,以便我可以存储有关它们的信息,例如订阅,发票,名称等。
提问
我成功地创建了文档,但我没有从Firestore得到任何回应,让我知道事情进展顺利。当我尝试记录res.它说 * 未定义 *。**我们应该检索文档以确保它工作吗?**这似乎是一个糟糕的模式,我希望得到一个状态码或其他东西。
const addUserToDatabase = (uid, email) => {
setDoc(doc(db, "users", uid), {
uid: uid,
email: email,
})
.then((res) => {
console.log("response:", res);
})
.catch((err) => {
console.log("unable to add user to database", err);
});
};
作为一个附加的问题,我在一个用户命令中做了两个调用,创建和帐户,然后添加文档。有一种情况是,可以创建用户,但没有创建文档。这将是一个糟糕的情况。我如何确保如果没有创建文档,那么不应该创建帐户;反之亦然?两者都必须成功
createUserWithEmailAndPassword(auth, values.email, values.password)
.then((credentials) => {
console.log(credentials);
if (credentials.user?.uid) {
const { uid, email } = credentials.user;
addUserToDatabase(uid, email);
} else {
throw new Error("Something went wrong");
}
})
.catch((err) => {
switch (err.code) {
case "auth/email-already-in-use":
setAuthError("That email is already in use");
break;
default:
console.log("did not create account:", err);
setAuthError("uncaught error");
break;
}
});
const addUserToDatabase = (uid, email) => {
setDoc(doc(db, "users", uid), {
uid: uid,
email: email,
})
.then((res) => {
console.log("response:", res);
})
.catch((err) => {
console.log("unable to add user to database", err);
});
};
1条答案
按热度按时间w1jd8yoj1#
如果我们看一下这段代码:
行为如下:
setDoc
的调用本身完成,则写入操作被提交到本地缓存,并且如果/当连接可用时,将与服务器同步。setDoc
的调用本身引发了一个异常,本地写操作失败并被中止(这种情况很少见)。then
块),数据被写入服务器。catch
块),则数据在服务器上被拒绝-通常是因为您的安全规则,但请检查错误以确定原因。因此,根据您想要检测的内容,您可以在
then
块中声明成功(对于在服务器上完成的写入),也可以在我在这里分享的代码之后的第一行中声明成功(对于完成的本地写入)。