【发布时间】:2017-10-19 18:14:46
【问题描述】:
上下文:我的应用程序目前允许用户使用用户名创建一个帐户。单击confirm - 创建帐户后,将对用户名 进行检查,以验证它不作为文档存在于usernames 集合中,即这只允许唯一的应用程序中的用户名。
用户名是在创建视图时添加到地图中的——在用户按下confirm按钮之前(我知道这是根本问题)
public static void getAllNonAvailableUsernames() {
FirebaseFirestore.getInstance()
.collection("usernames")
.get().addOnCompleteListener(task -> {
List<DocumentSnapshot> snapshots = task.getResult().getDocuments();
for (DocumentSnapshot snap : snapshots) {
usedUsernames.put(snap.getId(), snap.get("owner"));
}
});
}
问题出现在两个用户碰巧选择相同的用户名进行注册时。处理最后一个请求并覆盖文档中的 owner 字段,允许两个用户拥有相同的用户名:
我不确定如何解决这个问题,因为在验证发生之前可能无法完成对 usernames 集合中所有文档的检索。
【问题讨论】:
标签: android firebase race-condition google-cloud-firestore