You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以用户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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:35:11