Firestore-意外读取

时间:2019-06-03 20:17:46

标签: firebase flutter dart firebase-authentication google-cloud-firestore

有些人,我在这里确实有一个有趣的问题,如果你们中的任何一个能够帮助我,我将非常高兴。

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

  1. 注册电子邮件,密码和其他一些详细信息:
  2. 用户firebase,以便通过电子邮件和密码对用户进行身份验证并创建帐户,同时将用户的自定义数据写入数据库。
  3. 登录用户。

就是这样,这就是我所有的基本逻辑,而且据我所知,我怎么也没有从数据库中读取任何信息。

现在...问题是,由于某些奇怪的原因,当我注册用户时,我将转到Firebase控制台查看数据库的使用情况,对于一个用户,我将看到类似...的内容,创建后,我将进行1次写入(这与我预期的一样好),而且 13-20次来自数据库的读取

现在这是我的问题,为什么,当我只做身份验证和写操作时,我在风暴中有阅读

这是我现在正在使用的数据库代码。

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);
    });
  }
}

如果您认识某些人,可以向我解释在哪里/如何搜索才能找到此bug?因为你怎么看,我什么都没读。

1 个答案:

答案 0 :(得分:2)

由于我们不了解访问数据库的所有可能途径,因此无法确定,但是您应该意识到,使用Firebase控制台会导致读取,并且如果您在忙碌的时候将控制台保持打开状态集合/文档,您将自动阅读更新控制台显示的更改。这通常是意外读取的来源。

没有您要执行的所有步骤的完整复制步骤,就无法确定。