Firestore - 意外读取

Mir*_*cea 11 dart firebase firebase-authentication flutter google-cloud-firestore

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

我的应用流程是什么:

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

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

现在......问题是,由于一些奇怪的原因,当我注册我的用户时,我要去firebase控制台查看我的数据库的使用情况,我会看到类似......对于创建的一个用户,我将有 1 次写入(正如我预期的那样很好),但也有13-20 次从 DB 读取

现在这就是我的问题,为什么我在进行身份验证和写入时会阅读firestorm?

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

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);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你们中的一些人知道你能向我解释我需要在哪里/如何搜索才能找到这个错误吗?因为你怎么看我从来没有使用任何读过​​的东西。

Dou*_*son 15

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

如果没有您正在采取的所有步骤的完整复制步骤,则无法确定。

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

  • 感谢您提出保持 Firebase 控制台打开会导致读取的建议。我在代码中与 Firebase 的唯一交互就是这一行:“await db.collection(collection).doc(id).set(docData);”,不知何故,我的读取计数达到了顶峰!当我关闭 Firebase Cloud Firestore 数据控制台后,读取计数停止增加。 (4认同)
  • 我在理解读取的计算方式时遇到了同样的问题:/sf/ask/4410370681/?noredirect=1#comment111417284_63005295。我的控制台有 9 次写入。我的阅读量在不到一个小时内就达到了 53000 次,其中包含 3 个文档,每个文档有 2 个属性。我有同样无法解释的读取计数 - 我看不出我的设置是如何“繁忙的控制台”。在云 Firestore 文档中很难找到关于如何计算读取的清晰说明。@drigofonte - 你明白了吗? (2认同)