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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:25:19