如何从 Cloud Firestore 中获取数据,其中 user.uid 等于 Flutter 中的文档 ID?

Posted

技术标签:

【中文标题】如何从 Cloud Firestore 中获取数据,其中 user.uid 等于 Flutter 中的文档 ID?【英文标题】:how to get data from cloud firestore where user.uid equal to document id in flutter? 【发布时间】:2020-05-11 15:54:26 【问题描述】:

我有这个显示用户信息的个人资料屏幕。 用户通过身份验证后,我将数据存储在云 Firestore 中,文档 ID 等于用户 ID。 现在,我想从 cloud firestore 中检索当前 userId 等于文档 id 的数据。

现在我有这个:

class UserManagement 
  getData() async
    String userId = (await FirebaseAuth.instance.currentUser()).uid;
    print(userId);
    return Firestore.instance.collection('users').document(userId);

  

但是当我注销并以不同的用户重新登录后它显示相同的数据后,这无法正常工作。

UserManagement().getData().then((results) 
    setState(() 
      userFlag = true;
       users = results;
    );
    );

现在,如何获取姓名、电子邮件、课程、电话号码等其他字段 并且所有值都存储到 user.right 中?

【问题讨论】:

【参考方案1】:

如果您的 Firestore 中的文档 ID 等于 Firebase 身份验证控制台中的 userid,那么您需要先检索 uid 并将其作为参数传递给方法 document()

getData() async
    String userId = (await FirebaseAuth.instance.currentUser()).uid;
    return Firestore.instance.collection('users').document(userId);
  

【讨论】:

那么在配置文件中我必须进行哪些更改? UserManagement().getData().then((QuerySnapshot docs) userFlag = true; users = docs.documents[users.userId].data; ); 如果文档ID与当前用户登录ID相同,那么可以使用UserId轻松获取任何文档 有什么问题 Firestore.instance .collection('users') .document(userId) .get() .then((DocumentSnapshot ds) // use ds as a snapshot ds['name'] ); 要获取其他字段,请检查上面评论中的代码 ^【参考方案2】:

您的查询正在获取“userData”集合中的所有文档,然后从整个集合中挑选出第一个文档。对于对该集合具有读取权限的所有用户,这将是同一组文档。我不明白为什么您会期望不同的用户会得到不同的结果。也许您打算为给定用户 ID 的用户访问单个文档,而不是访问所有文档。如果是这种情况,您应该通过其 ID 请求该文档,Firestore.instance.collection('userData').document(uid)' whereuid` 是当前登录用户的 ID。

此外,您的代码正在查询一个名为“userData”的集合,但您的屏幕截图显示了一个名为“users”的集合,因此令人困惑。

【讨论】:

你的意思是我的 getData 函数看起来像这样?:getData(String uid) return Firestore.instance.collection('users').document(uid); 我不知道 - 这符合您的要求吗?你的问题不是很清楚你的目标是什么。 如何获取当前用户的uid? FireBase 用户 = FirebaseAuth.instance.currentUser(); 我的目标是从 Firestore 中检索文档 ID 等于当前用户 uid 的数据。

以上是关于如何从 Cloud Firestore 中获取数据,其中 user.uid 等于 Flutter 中的文档 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Cloud Firestore 数据库中获取 node.js 中的特定字段值?

即使文档中缺少请求的字段,如何安全地从 cloud-firestore 获取数据?

在 Cloud Functions 中使用 Cloud Firestore 数据

如何从Swift中的Cloud FireStore Firebase访问特定字段

无法从 Firebase(Cloud Firestore 数据库)获取数据

如何通过 Desc SwiftUI 对 Cloud Firestore 数据进行排序