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

如何在Google Firestore中通过当前登录用户获取指定文档

解决Firebase获取用户UID对应文档失败的问题

我来帮你排查这个问题,核心问题主要出在用户身份验证的时机、Firestore API调用错误和Vue实例属性的访问方式上,咱们一步步来修复:

1. 先修正Firestore的API调用错误

你代码里用了.document(userId),但Firestore的正确方法是.doc(),这个拼写错误会导致查询根本无法执行,这是第一个要改的点。

2. 处理Auth状态的异步问题

Firebase的currentUser是异步初始化的,组件created钩子执行时,用户可能还没完成登录验证,这时候currentUser会是null,自然拿不到uid。正确的做法是监听Auth状态变化,等用户身份确认后再去查询Firestore。

3. 正确访问Vue的计算属性

在组件的created钩子中,要通过this.userId来访问计算属性,直接写userId会被当成全局变量,导致"未定义"的错误。

4. 单个文档查询不需要forEach

你是查询单个指定UID的文档,get()返回的是DocumentSnapshot,不是批量的QuerySnapshot,所以不需要用forEach,直接读取doc.data()即可。

修正后的完整代码

<script>
// eslint-disable-next-line
import firebase from "firebase";
// eslint-disable-next-line
import firestore from "firestore";
import db from "@/components/fbInit";

export default {
  components: {},
  data() {
    return {
      user: null // 单个用户数据,不需要数组,因为是查单个文档
    };
  },
  computed: {
    userId() {
      return firebase.auth().currentUser?.uid; // 可选链避免null报错
    }
  },
  created() {
    // 监听Auth状态变化,确保用户已登录
    firebase.auth().onAuthStateChanged(user => {
      if (user) {
        // 用户已登录,获取UID并查询文档
        db.collection("userProfiles")
          .doc(this.userId)
          .get()
          .then(doc => {
            if (doc.exists) {
              // 文档存在,赋值数据
              this.user = {
                id: doc.id,
                name: doc.data().name,
                company: doc.data().company,
                state: doc.data().state
              };
            } else {
              console.log("找不到对应用户的文档!");
            }
          })
          .catch(error => {
            console.error("获取文档出错:", error);
          });
      } else {
        console.log("用户未登录!");
      }
    });
  }
};
</script>

额外检查项

  • 确认userProfiles集合中确实存在以当前用户UID命名的文档,可以去Firebase控制台查看
  • 检查Firestore的安全规则,确保允许登录用户读取自己的文档,比如:
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /userProfiles/{userId} {
          allow read, write: if request.auth != null && request.auth.uid == userId;
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者Yewla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:28:24