检查用户名是否已存在:Swift,Firebase
我试图检查用户名是否存在。当我拨打queryOrderedBychild
时,快照值始终可用,但会打印我的整个数据库,而不仅仅是我请求的数据queryOrderby
。当我打电话给queryEqualToValue
时,它总是返回null。我已经尝试了很多方法来弄明白。检查用户名是否已存在:Swift,Firebase
这是我的代码:
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 = "[email protected]";
isFollow = 0;
isFriend = 0;
};
};
})
这是安全规则:
"rules": {
".read": true,
".write": "auth != null",
"Users": {
".read": true,
".write": "auth != null",
".indexOn": ["Nickname", "User Profile"]
}
}
}
修改您的JSON树包括一个单独的节点active_usernames
,其中添加每个用户wh的用户名enever你创建新的用户,只要修改您的用户修改其用户名...
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
事件的文本框的(为了更好的用户体验。!)
对不起,我整天都在睡觉。我很疲倦。我需要询问许多关于Firebase的问题。无法在此发布所有问题。我可以通过电子邮件或Facebook联系您,我可以联系您的任何事情。非常感谢你 !!! –
@KhôiVNguyễn这不是*的工作原理。如果您有很好的问题,请将它们带到这里。在大多数用户在线的时候写下您的问题,通常是美国东部时间上午11点至下午4点。希望你能得到答案。或者可能在以前的答案中找到你的问题的答案。 – Honey
你是什么UsersRef?我的猜测是它在这种情况下链接到用户ID(g50X0FvEsSO4L457v7NzS3dAABl1),并且昵称不是它的直接子项,所以它从来没有找到它,因为它没有在正确的位置搜索。当我经历这个时,我还记得在通过子节点进行搜索时遇到.value问题,我使用.ChildAdded和.ChildChanged代替我相信。 – Dallas