2016-09-21 53 views
2

我试图检查用户名是否存在。当我拨打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"] 
    } 
    } 
} 
+0

你是什么UsersRef?我的猜测是它在这种情况下链接到用户ID(g50X0FvEsSO4L457v7NzS3dAABl1),并且昵称不是它的直接子项,所以它从来没有找到它,因为它没有在正确的位置搜索。当我经历这个时,我还记得在通过子节点进行搜索时遇到.value问题,我使用.ChildAdded和.ChildChanged代替我相信。 – Dallas

回答

2

修改您的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事件的文本框的(为了更好的用户体验。!)

+0

对不起,我整天都在睡觉。我很疲倦。我需要询问许多关于Firebase的问题。无法在此发布所有问题。我可以通过电子邮件或Facebook联系您,我可以联系您的任何事情。非常感谢你 !!! –

+1

@KhôiVNguyễn这不是stackoverflow的工作原理。如果您有很好的问题,请将它们带到这里。在大多数用户在线的时候写下您的问题,通常是美国东部时间上午11点至下午4点。希望你能得到答案。或者可能在以前的答案中找到你的问题的答案。 – Honey

相关问题