Firebase中从用户对象获取company ID失败问题求助
解决Firebase中无法获取用户companyID的问题
你当前代码的核心问题是:doc(db, 'Users', user.uid)创建的只是Firestore的文档引用对象,不是文档里存储的实际数据,所以直接访问.companyID自然会返回undefined。另外user.uid是同步属性,不需要加await。
按以下步骤修正代码即可获取到companyID:
- 先创建用户文档的引用
- 用
getDoc()异步获取文档快照 - 验证文档存在后,从快照中提取数据字段
修正后的完整代码:
const handleSubmit = async (e) => { e.preventDefault() setError('') try { const { user } = await signIn(email, password) const userID = user.uid // uid是同步属性,不用加await const userDocRef = doc(db, 'Users', userID) const userDocSnap = await getDoc(userDocRef) // 获取文档的实际数据快照 if (userDocSnap.exists()) { const userData = userDocSnap.data() const compID = userData.companyID console.log(userID + ' USERID') console.log(compID + ' COMPANYID') navigate('/Main/Dashboard') } else { console.log('对应用户的文档不存在') setError('用户信息未找到,请检查账号') } } catch (e) { setError(e.message) console.log(e.message) } }
关键说明:
doc()方法仅生成指向Firestore文档的路径引用,不会自动拉取数据,必须配合getDoc()才能获取文档内容- 始终检查文档是否存在(
userDocSnap.exists()),避免因文档缺失导致的后续报错 - 文档中的字段数据需要通过
snapshot.data()方法提取后才能访问
内容的提问来源于stack exchange,提问作者Casey James
相关产品推荐
相关产品推荐

