使用useFirestore通过uid获取用户始终返回undefined问题咨询
解决useFirestore获取用户数据返回undefined的问题
先看你的代码:
const user = useFirestore(doc(db, 'users', uid)); console.log('user', user);
以下是几个可能的原因和解决办法:
先确认uid是否有效
先在控制台打印uid,看看是不是空值、undefined或者根本不存在的用户ID。如果uid本身不对,Firestore找不到对应文档,自然返回undefined。异步加载需等待数据就绪
useFirestore是异步获取数据的,组件第一次渲染时数据还没加载完,此时user就是undefined。你得等数据加载完成再用,比如加个判断:const user = useFirestore(doc(db, 'users', uid)); if (!user) { return <div>加载中...</div>; } // 这里再使用user数据 return <div>用户名:{user.name}</div>;检查Firestore安全规则
如果权限不够,请求会被拒,也会返回undefined。开发环境可以临时开权限测试:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }没问题后再改成严谨的规则,比如只允许用户读自己的文档:
match /users/{userId} { allow read: if request.auth.uid == userId; }确认文档是否真的存在
去Firestore控制台看看users集合里有没有对应uid的文档,别是文档本身就不存在导致的undefined。检查useFirestore的用法是否正确
如果你用的是React Firebase Hooks的useFirestore,它的返回值是包含data、loading、error的对象,直接取的话拿不到数据,得解构data:const { data: user, loading, error } = useFirestore(doc(db, 'users', uid)); if (loading) return <div>加载中...</div>; if (error) return <div>出错了:{error.message}</div>; console.log('user', user);
内容的提问来源于stack exchange,提问作者Raghav Patel
相关产品推荐
相关产品推荐

