【问题标题】:Filter Firestore data to only included the current users information过滤 Firestore 数据以仅包含当前用户信息
【发布时间】:2020-12-15 20:32:51
【问题描述】:

我试图限制从 Firestore 返回的数据仅限于当前用户。目前,我的应用程序正在将所有用户信息返回到我的主屏幕上的 listveiw,这不是预期的结果。我已经阅读了许多描述如何实现这一点的文章,但似乎无法通过我的代码实现这一点(如下)。我有一个带有单个顶级集合的 Firestore 数据库,该集合为每个经过 Firebase 身份验证的用户保存一个文档。我不希望返回所有文档/用户信息,只返回当前用户文档/用户信息。希望我已经提供了正确的代码来应用此更改...

--- 数据库服务代码 ------

 import 'package:example_app/models/family.dart'; import
 'package:example_app/models/user.dart'; import
 'package:cloud_firestore/cloud_firestore.dart';
 
 class DatabaseService {   final String uid;   DatabaseService({
 this.uid  });
 
   // collection reference   final CollectionReference familyCollection
 =  Firestore.instance.collection('family');   Future<void> updateUserData(
       String nameFirst,
       String nameLast,
      String phoneNumber,
      String profilePicture,
      String familyMemberID,
      String userID,
    ) async {  // String sugars, int strength) async {

      return await familyCollection.document(uid).setData({
        'nameFirst': nameFirst,
        'nameLast': nameLast,
        'phoneNumber': phoneNumber,
        'profilePicture': profilePicture,
        'familyMemberID': familyMemberID,
        'userID': userID,
      });   }
  
    // family list from snapshot   List<Family>
  _familyListFormSnapshot(QuerySnapshot snapshot) {
      return snapshot.documents.map((doc){
        //print(doc.data);
        return Family(
            nameFirst: doc.data['nameFirst'] ?? '',
            nameLast: doc.data['nameLast'] ?? '',
            phoneNumber: doc.data['phoneNumber'] ?? '',
            profilePicture: doc.data['profilePicture'] ?? '',
            familyMemberID: doc.data['familyMemberID'] ?? '',
            userID: doc.data['userID'] ?? ''
        );
      }).toList();   }
  
    // user data from snapshots   UserData
  _userDataFromSnapshot(DocumentSnapshot snapshot) {
      return UserData(
          uid: uid,
          nameFirst: snapshot.data['nameFirst'],
          nameLast: snapshot.data['nameLast'],
          phoneNumber: snapshot.data['phoneNumber'],
          profilePicture: snapshot.data['profilePicture'],
          familyMemberID: snapshot.data['familyMemberID'],
          userID: snapshot.data['userID'],
      );   }
  
    // get profiles stream   Stream<List<Family>> get profiles {
      return familyCollection.snapshots()
          .map(_familyListFormSnapshot);   }
  
    // get user doc stream   Stream<UserData> get userData {
      return familyCollection.document(uid).snapshots()
          .map(_userDataFromSnapshot);   } }

【问题讨论】:

  • 请不要想出你自己的代码格式,因为你发布它的方式几乎是不可读的。我快速编辑它以清理它,但请自己也单击编辑链接并修复任何挥之不去的问题,例如额外/缺失的换行,以及第 7 行的评论。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

要获取当前用户信息,您可以使用userUID 指定document path,我假设这是每个用户的documentId。就是这样,这是查询:

final data = await Firestore.instance
          .document("users/${currentUser.uid}")
          .get();

它返回DocumentSnapshot 所以使用这样的数据:data.data

【讨论】:

  • 感谢 Aldy,我可以看到逻辑,但我无法让它与我的代码一起使用。不管我把它放在哪里,它都不会被接受。关于我的代码将去哪里的任何建议?再次感谢文森特。
  • 当然我会进一步帮助您能否提供更多代码来尝试获取用户文档谢谢
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2019-10-25
  • 1970-01-01
  • 2020-01-01
  • 2021-03-29
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多