我正在使用 Firebase
实时数据库制作一个 Android 应用程序。当新用户在我的应用程序上注册时,该用户的数据将保存在 Firebase 数据库中。
用户必须提供以下详细信息才能注册:
- 全名
- 电子邮件
- 用户名
- 密码
数据库结构
每当新用户尝试注册时,我必须确保每个用户的用户名都是唯一的,因此我会检查数据库是否用户输入的 username
已经存在于数据库中。
为此,我编写了以下方法:
private boolean usernameExists(String username) {
DatabaseReference fdbRefer = FirebaseDatabase.getInstance().getReference("Users/"+username);
return (fdbRefer != null);
}
我在这个方法背后的逻辑是,如果 getReference
方法找不到对指定路径的引用,它将返回 null 以便我可以返回 fdbRefer
是 null
还是不是。如果 fdbRefer
是 null
,则意味着 username
不存在于数据库中。
问题
此方法的问题在于它总是返回 true
输入的 username
--- 是否存在于数据库中。这让我相信 fdbRefer
永远不会 null
。
这让我想到了我的问题……
问题
getReference
方法在 firebase
数据库中找不到指定路径时返回什么,以及检查 username
是否已存在的正确方法是什么-数据库与否?
原文由 user7500403 发布,翻译遵循 CC BY-SA 4.0 许可协议
要检查用户是否存在,请使用以下代码:
您还可以使用查询来实现同样的事情,如下所示:
这是另一种遍历整个
Users
节点的方法,但不只是使用对单个用户的直接引用。当您使用uid
作为用户的唯一标识符而不是用户名(就像您现在所做的那样)时,更有可能使用此选项。因此,如果您的数据库结构可能与此类似:第二种解决方案是推荐的解决方案。
还有另一种解决方案,需要您创建另一个名为
userNames
的节点,您只能在其中保存唯一的用户名。另请在下方找到相应的安全规则:但由于在这种情况下,您的用户名已经是节点的名称,我建议您继续使用第一个。