Flutter中如何从Firebase Firestore获取当前用户专属数据?
解决仅显示当前用户Firestore数据的问题
你的问题出在获取所有用户文档ID并遍历显示的逻辑上,要实现仅当前用户查看自己的数据,需要从数据存储和读取逻辑两方面调整:
1. 确保用户数据与当前Auth用户绑定
提交表单时,将Firebase Auth生成的用户UID作为文档ID(或在文档中存储UID字段),这样能精准关联用户和数据:
// 提交表单的核心代码示例 final currentUser = FirebaseAuth.instance.currentUser; if (currentUser != null) { // 用用户UID作为文档ID,直接关联 await FirebaseFirestore.instance.collection('users').doc(currentUser.uid).set({ 'Email name': currentUser.email, 'age': ageController.text, 'firstname': firstNameController.text, 'lastname': lastNameController.text, }); }
2. 修改数据读取逻辑,仅加载当前用户的文档
不需要再获取所有用户的文档ID,直接通过当前用户UID获取对应文档:
重构后的页面主体代码
body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('SignUp as ${user!.email!}', style: const TextStyle(fontSize: 20)), // 直接传入当前用户UID作为documentId,加载单用户数据 Expanded(child: GetuserData(documentId: user.uid)), ], ), )
移除冗余代码
删除原来的List<String> docIDs = []和getDocId()方法,因为现在不需要遍历所有用户了。
3. 关键:配置Firestore安全规则
为了防止客户端恶意获取其他用户数据,必须配置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; } } }
这样调整后,App只会加载当前登录用户的Firestore数据,其他用户的数据既不会在UI显示,也无法通过客户端请求获取。
内容的提问来源于stack exchange,提问作者Saleem Yasin
相关产品推荐
相关产品推荐

