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

从Firestore/Firebase获取当前用户数据时返回undefined如何解决

问题产生原因
  • Firestore users 集合不存在对应当前登录用户uid的文档:Firebase Auth创建账号不会自动同步生成Firestore用户文档,需要开发者手动写入,若缺少这一步则对应文档不存在,data() 直接返回undefined
  • Firestore安全规则拦截了读取请求:默认安全规则会拦截所有未配置权限的读写请求,且get()方法在无权限时不会抛出错误,只会将返回的文档快照exists属性置为false,调用data()就返回undefined
  • 异步时序问题:调用getCurrentUser方法时,Firebase Auth状态未完成初始化,导致实际传入的uid为空或和预期不一致,找不到对应文档
排查步骤
  • 第一步:先打印文档快照的exists属性判断文档是否可读
async getCurrentUser(){
  const uid = firebase.auth().currentUser?.uid
  // 先确认当前uid正常
  console.log('当前传入的uid', uid)
  const database = db.collection('users').doc(uid)
  const dbResults = await database.get()
  // 打印exists属性
  console.log('文档是否存在/可读', dbResults.exists)
  console.log(dbResults.data())
}

如果exists返回false,继续下面的排查

  • 第二步:登录Firebase控制台,进入Firestore数据库页面,查看users集合下是否存在对应uid的文档,确认文档存在且字段正常
  • 第三步:临时修改Firestore安全规则为测试规则,验证是否是权限问题:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

修改后如果能正常拿到data()返回值,说明是安全规则配置问题

解决方法
  • 若为文档不存在问题:在用户注册成功的逻辑中,手动写入用户文档到users集合:
// 注册示例代码
async register(email, password) {
  const userCredential = await firebase.auth().createUserWithEmailAndPassword(email, password)
  const uid = userCredential.user.uid
  // 手动写入用户文档
  await db.collection('users').doc(uid).set({
    uid,
    email,
    // 其他自定义用户字段
  })
}
  • 若为安全规则问题:调整安全规则,开放用户读取自身文档的权限:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}
  • 若为异步时序问题:通过Auth状态监听回调触发用户信息读取逻辑,避免Auth未初始化完成就调用接口:
// 页面初始化时添加监听
firebase.auth().onAuthStateChanged(user => {
  if (user) {
    // 认证完成后再调用获取用户信息的方法
    getCurrentUser()
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:45:03