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

如何在React Js中使用Firebase 9读取集合中单个用户的文档

React + Firebase 9 读取当前用户文档并显示displayName

实现步骤

  • 监听Firebase用户认证状态,获取当前登录用户的UID
  • 通过UID定位Firestore中对应用户的文档
  • 读取文档中的displayName并渲染到页面

完整代码示例

1. Firebase配置文件

// firebaseConfig.js
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";

// 替换成你的Firebase配置
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
};

const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export const db = getFirestore(app);

2. 用户信息组件

// UserProfile.jsx
import { useState, useEffect } from "react";
import { auth, db } from "./firebaseConfig";
import { doc, getDoc } from "firebase/firestore";

const UserProfile = () => {
  const [displayName, setDisplayName] = useState("");
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    // 监听用户登录状态变化
    const unsubscribe = auth.onAuthStateChanged(async (currentUser) => {
      if (currentUser) {
        // 定位到当前用户的文档(假设集合名为users)
        const userDocRef = doc(db, "users", currentUser.uid);
        const userDocSnapshot = await getDoc(userDocRef);

        if (userDocSnapshot.exists()) {
          // 读取文档中的displayName
          setDisplayName(userDocSnapshot.data().displayName);
        } else {
          console.error("未找到对应用户的文档");
        }
      } else {
        // 用户未登录,清空状态
        setDisplayName("");
      }
      setIsLoading(false);
    });

    // 组件卸载时取消监听
    return () => unsubscribe();
  }, []);

  if (isLoading) {
    return <div>加载中...</div>;
  }

  return (
    <div className="user-profile">
      {displayName ? (
        <h3>欢迎回来,{displayName}!</h3>
      ) : (
        <p>请登录以查看个人信息</p>
      )}
    </div>
  );
};

export default UserProfile;

关键注意事项

  • Firestore安全规则:必须配置规则确保用户只能读取自己的文档,避免权限问题:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}
  • 注册时同步文档:用户注册成功后,要将displayName等信息写入Firestore的users集合,对应文档ID为用户UID,否则读取时会找不到文档。

内容的提问来源于stack exchange,提问作者CLEAR DESIGN WEBS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:53:01