Firebase Firestore-意外读取

Firebase Firestore-意外读取,firebase,flutter,dart,firebase-authentication,google-cloud-firestore,Firebase,Flutter,Dart,Firebase Authentication,Google Cloud Firestore,伙计们,我这里确实有一个有趣的问题,如果你们中的任何人能帮我解决这个问题,我将非常高兴 我的应用程序流程是什么: 使用电子邮件、密码和其他一些详细信息进行注册: 用户firebase,以便对用户进行身份验证,并通过电子邮件和密码创建帐户,同时我将用户的自定义数据写入数据库 登录用户 就这样,这就是我的基本逻辑,你可以看到,就我所知,我没有从数据库中读取任何数据 现在。。。问题是,出于某种奇怪的原因,当我注册我的用户时,我会去firebase控制台查看我的DB的使用情况,我会看到类似于。。。对于创

伙计们,我这里确实有一个有趣的问题,如果你们中的任何人能帮我解决这个问题,我将非常高兴

我的应用程序流程是什么:

  • 使用电子邮件、密码和其他一些详细信息进行注册:
  • 用户firebase,以便对用户进行身份验证,并通过电子邮件和密码创建帐户,同时我将用户的自定义数据写入数据库
  • 登录用户
  • 就这样,这就是我的基本逻辑,你可以看到,就我所知,我没有从数据库中读取任何数据

    现在。。。问题是,出于某种奇怪的原因,当我注册我的用户时,我会去firebase控制台查看我的DB的使用情况,我会看到类似于。。。对于创建的一个用户,我将有1次写入操作(这与我预期的一样好),但也有13-20次从DB读取操作

    现在这就是我的问题,为什么我在做创作和写作的时候会在firestorm上阅读

    这是我现在正在使用的DB代码

    class DatabaseFirebase implements BaseDataBase {
      final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
      final FirebaseStorage _storage = FirebaseStorage.instance;
    
      FirebaseUser _firebaseUser;
      Firestore _firestore = Firestore.instance;
    
      @override
      Future<String> login(String email, String password) async {
        _firebaseUser = await _firebaseAuth.signInWithEmailAndPassword(
            email: email, password: password);
        return _firebaseUser.uid;
      }
    
      @override
      Future<String> register(String email, String password) async {
        _firebaseUser = await _firebaseAuth.createUserWithEmailAndPassword(
            email: email, password: password);
        return _firebaseUser.uid;
      }
    
      @override
      Future<UserData> getCurrentUser() async {
        if (_firebaseUser == null)
          _firebaseUser = await _firebaseAuth.currentUser();
        UserData user = UserData();
        user.email = _firebaseUser?.email;
        user.name = _firebaseUser?.displayName;
        return user;
      }
    
      @override
      Future<void> logout() async {
        _firebaseAuth.signOut();
      }
    
      @override
      Future<void> onAuthStateChanged(void Function(FirebaseUser) callback) async {
        _firebaseAuth.onAuthStateChanged.listen(callback);
      }
    
      @override
      Future<void> writeUser(UserData user) async {
        _firestore.collection("Users").add(user.toMap()).catchError((error) {
          print(error);
        });
      }
    }
    
    类DatabaseFirebase实现BaseDataBase{ final FirebaseAuth _FirebaseAuth=FirebaseAuth.instance; 最终FirebaseStorage _storage=FirebaseStorage.instance; FirebaseUser\u FirebaseUser; Firestore _Firestore=Firestore.instance; @凌驾 未来登录(字符串电子邮件、字符串密码)异步{ _firebaseUser=等待_firebaseAuth.Signin,使用Email和Password( 电子邮件:电子邮件,密码:密码); 返回firebaseUser.uid; } @凌驾 未来注册(字符串电子邮件、字符串密码)异步{ _firebaseUser=Wait_firebaseAuth.createUserWithEmailAndPassword( 电子邮件:电子邮件,密码:密码); 返回firebaseUser.uid; } @凌驾 未来getCurrentUser()异步{ 如果(_firebaseUser==null) _firebaseUser=wait_firebaseAuth.currentUser(); UserData user=UserData(); user.email=\u firebaseUser?.email; user.name=\u firebaseUser?.displayName; 返回用户; } @凌驾 将来注销()异步{ _firebaseAuth.signOut(); } @凌驾 未来onAuthStateChanged(无效函数(FirebaseUser)回调)异步{ _firebaseAuth.onAuthStateChanged.listen(回调); } @凌驾 未来写入器(用户数据用户)异步{ _firestore.collection(“Users”).add(user.toMap()).catchError((error){ 打印(错误); }); } }
    如果你们中的一些人知道,你能解释一下我需要在哪里/如何搜索才能找到这个bug吗?因为您如何看到我没有使用任何read what so ever。

    鉴于我们不了解访问您数据库的所有可能路径,因此不可能确切知道,但您应该知道,使用Firebase控制台将导致读取。如果在写入活动繁忙的集合/文档上保持控制台打开,控制台将自动读取更新控制台显示的更改。这通常是意外读取的来源

    如果没有完整的复制步骤,没有确切的步骤,就无法确定


    Firebase目前不提供跟踪文档读取来源的工具。如果您需要测量应用程序中的特定读取,您必须自己进行跟踪。

    您有任何安全规则吗?是的,我有
    service cloud.firestore{match/databases/{database}/documents{match/{document=**}{//allow read,write:If false;allow read,write;}}
    我相信安全规则会导致读取,但这在这里不太可能发生。进行此操作时是否打开了Firestore控制台?因为在那里看到文档算是读取。是的,但我只是在数据库->使用中看到了它,这并不是真正的原因。我的意思是,我已经无数次地重新启动了这个页面,但什么都没有发生。在我从应用程序中编写用户之后,我看到读取的数量正在增加。感谢您的建议,保持Firebase控制台打开将导致读取。在我的代码中,我与Firebase的唯一交互是这样一行:
    await db.collection(collection.doc(id.set)(docData)不知怎的,我的阅读计数达到了极限!关闭Firebase Cloud Firestore数据控制台后,读取计数停止增加。我在理解读取如何计算时遇到了相同的问题:。我的控制台有9次写入。我的阅读量在不到一小时的时间内就达到了53000,其中有一个集合,3个文档每个都有2个属性。我有同样无法解释的读取计数-我看不出我的设置是如何“忙碌的控制台”。在CloudFireStore文档中很难找到关于如何计算读取的清晰信息@drigofonte-你明白了吗?如果你在Firestore控制台打开时在Chrome中打开网络选项卡,你可以在后台看到请求。这些累积了大量的读取计数。我只是用一个集合一个文档访问控制台,并将其打开30秒,读取次数大约为9-12次。所以,是的,永远不要长时间访问控制台。