如何以用户UID为文档ID在Firestore中存储、查询及更新数据
修正Firestore用UID存储用户数据的代码及查询更新示例
你的代码存在几处关键问题,导致无法正确在Firestore中以UID为文档ID存储用户数据,下面是修正后的完整代码,同时附上查询和更新数据的示例:
原代码问题点
- 混淆了Auth和Firestore实例:操作Firestore需要使用Firestore的实例(比如
db),而不是Auth的auth对象 - 异步操作未正确等待:
updateProfile是异步函数,不加await会导致后续代码提前执行,可能出现逻辑顺序问题 - 语法错误:
auth.addDoc.collection写法完全错误,不需要addDoc,直接通过doc(用户UID)指定文档ID后调用set即可 - 代码结构不完整:
try、then块都缺少闭合的括号和花括号,且未处理异步操作的错误
修正后的完整代码
// 假设你已经初始化了Firestore实例,命名为db import { createUserWithEmailAndPassword, updateProfile } from "firebase/auth"; import { doc, setDoc } from "firebase/firestore"; try { const userCredential = await createUserWithEmailAndPassword(auth, email, password); const user = userCredential.user; // 等待用户资料更新完成 await updateProfile(user, { displayName: username }); toast.success('Account successfully created'); // 用用户UID作为文档ID,在Firestore的users集合中存储数据 await setDoc(doc(db, "users", user.uid), { username: username, email: email, // 可添加其他字段,比如创建时间 createdAt: new Date() }); } catch (error) { // 处理所有可能的错误:创建用户失败、更新资料失败、存储数据失败 console.error("操作失败:", error); toast.error('Failed to create account'); }
查询用户数据示例
根据UID查询用户数据:
import { doc, getDoc } from "firebase/firestore"; async function getUserData(uid) { const userDocRef = doc(db, "users", uid); const userDocSnap = await getDoc(userDocRef); if (userDocSnap.exists()) { return userDocSnap.data(); } else { console.log("该用户数据不存在"); return null; } }
更新用户数据示例
更新用户指定字段(比如修改用户名):
import { doc, updateDoc } from "firebase/firestore"; async function updateUserData(uid, newData) { const userDocRef = doc(db, "users", uid); await updateDoc(userDocRef, newData); console.log("用户数据更新成功"); } // 调用示例:修改用户名 updateUserData(user.uid, { username: "newUsername" });
内容的提问来源于stack exchange,提问作者Adewole Solomon
相关产品推荐
相关产品推荐

