使用Swift和Firebase检查用户是否存在用户名

时间:2017-12-20 13:57:25

标签: ios swift firebase firebase-realtime-database

我正在尝试编写一个在用户存在时传递用户数据的函数。当用户名在数据库中时,代码是可以的,但是如果数据库中没有记录用户名,我不知道如何使用返回函数。

我是初学者,这就是我所做的:

func observeUserByUsername(username: String, completion: @escaping (Userm?) -> Void) {
      REF_USERS.queryOrdered(byChild: "username_lowercase").queryEqual(toValue: username).observeSingleEvent(of: .childAdded) { (snapshot) in

         if let dict = snapshot.value as? [String: Any] {
            let user = Userm.transformUser(dict: dict, key: snapshot.key)
            completion(user)
         } else {
            print("no user")
            completion(nil)
         }
      }
}

我想要这样的内容:如果有用户使用此用户名 - >返回零(完成)。

你知道我怎么能这样做吗?

1 个答案:

答案 0 :(得分:0)

因此,如果我做对了,您只想检查是否存在具有用户名的用户。您只需输入firebase的路径并使用exists()方法检查此子节点是否存在。我有一个类似的方法,你可以改变它以适应你的项目。

func checkUsernameAvailability(completion: @escaping (_ available:Bool)->()){
    guard let lowercasedText = usernameTextField.text?.lowercased() else {completion(false); return}
    let ref = Database.database().reference().child("users").child("username").child(lowercasedText)
    ref.observeSingleEvent(of: .value) { (snapshot) in
        if snapshot.exists(){
            completion(false)
            return
        }else{
            completion(true)
        }
    }
}

小心,Firebase不区分大小写(这就是为什么我总是检查并存储小写版本)。如果你的子节点,例如是'UserName'并且您搜索名称'username'它会告诉您已经有一个具有此名称的名称。