Ios 检查用户名是否已经存在:Swift,Firebase
我正在检查用户名是否存在。当我调用queryOrderedBychild时,快照值始终可用,但它将打印我的整个数据库,而不仅仅是我请求queryOrderby的数据。当我调用QueryQualtOvalue时,它总是返回null。我试过很多方法来解决这个问题 这是我的代码:Ios 检查用户名是否已经存在:Swift,Firebase,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在检查用户名是否存在。当我调用queryOrderedBychild时,快照值始终可用,但它将打印我的整个数据库,而不仅仅是我请求queryOrderby的数据。当我调用QueryQualtOvalue时,它总是返回null。我试过很多方法来解决这个问题 这是我的代码: DataService.instance.UsersRef.queryOrdered(byChild:"Nickname").queryEqual(toValue: "kai1004pro").observe(.value,
DataService.instance.UsersRef.queryOrdered(byChild:"Nickname").queryEqual(toValue: "kai1004pro").observe(.value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("not found")
} else {
print("found")
print(snapshot.value)
}
})
这是我的json树:
Optional({
g50X0FvEsSO4L457v7NzS3dAABl1 = {
"User Profile" = {
Birthday = "Sep 20, 1992";
Gender = Female;
Nickname = kai1004pro;
UserUID = g50X0FvEsSO4L457v7NzS3dAABl1;
emailAddress = "poqksbs@gmail.con";
isFollow = 0;
isFriend = 0;
};
};
})
这是安全规则:
"rules": {
".read": true,
".write": "auth != null",
"Users": {
".read": true,
".write": "auth != null",
".indexOn": ["Nickname", "User Profile"]
}
}
}
修改JSON树以包含一个单独的节点active_用户名,即在创建新用户时添加每个用户的用户名,在用户修改其用户名时进行修改
myApp:{
users:{
uid1:{....},
uid2:{....},
uid3:{....},
uid4:{....},
}
active_usernames :{
uid1username : "true",
uid2username : "true",
uid3username : "true",
uid4username : "true"
}
}
要检查您的用户名是否已存在:-
//Checking username existence
FIRDatabase.database().reference().child("active_usernames").child(self.enteredUsername.text!).observeSingleEvent(of: .value, with: {(usernameSnap) in
if usernameSnap.exists(){
//This username already exists
}else{
//Yippee!.. This can be my username
}
})
还可以通过操纵安全规则,将安全规则更改为仅对所有人可读
{rules :{
active_usernames : {
".read" : "true",
".write" : "auth != null"
}
}
}
PS:-enteredUsername是用于输入用户名的文本字段
建议:-将检查代码保存在文本字段的didChangeEditing事件中,以获得更好的用户体验 你的用户是什么?我的猜测是,在本例中,它链接到用户id g50X0FvEsSO4L457v7NzS3dAABl1,昵称不是它的直接子项,因此它永远找不到它,因为它没有搜索正确的位置。当我经历这个过程时,我还记得在搜索子节点时,我使用了.ChildAdded和.ChildChanged,而不是.value。很抱歉,我睡了一整天。我很累。我有很多关于Firebase的问题需要问。无法在此发布所有问题。我可以通过电子邮件或Facebook与您联系吗?我可以联系到您的任何信息。非常感谢@科维恩圭ễn stackoverflow不是这样工作的。如果你有好的问题,就把它们带到这里。在大多数用户在线的时间写你的问题,通常是美国东部时间上午11点到下午4点。希望你能得到答案。或者在前面的答案中找到你问题的答案。