检查没有 login/user_credential 的用户名

Check for username without login/user_credential

当新用户注册时,我必须检查是否已经提供了所需的用户名。因此,我使用以下查询检查用户名:

result = await FirebaseFirestore.instance
      .collection('user')
      .where('usernameName', isEqualTo: usernameEditController.text)
      .get();
userNameExists = result.docs.isEmpty;

代码工作正常,如果用户名已经给出,则返回正确的布尔值。

现在 Firebase 规则有问题。因为我在登录时要求输入用户名(上面的代码),所以我必须将 firebase firestore 规则设置为:

rules_version = '2';
  service cloud.firestore {
   match /databases/{database}/documents {
   match /{document=**} {
   allow read, write;
   }
  }
}

但是有了这些规则,每个人都可以读写。是否可以在不更改规则或使用另一个用户名查询的情况下检查用户名?

您可以允许所有用户检查“用户”collection,甚至无需验证。这不是最佳解决方案,因为任何人都可以阅读用户的 collection.

您可以做的另一件事是有另一个 collection 称为“用户名”,您将向其添加新用户,但唯一的数据将是用户名。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
   match /{collectionName}/{documentId} {
   allow read : if (collectionName == "users" || request.auth != null);
   allow write : if request.auth != null;
}
  }
}