Swift + Firebase - 检查是否存在具有autoId的节点的值

时间:2017-07-02 07:10:05

标签: ios swift firebase firebase-realtime-database

我想检查用户名是否存在。

但是Xcode抱怨我的安全规则。

  

[Firebase / Database] [I-RDB034028]使用未指定的索引。考虑   在/ users处添加“.indexOn”:“profile / username”到您的安全规则   为了更好的表现

如果我删除“$ uid”Xcode不再抱怨,但我的脚本效果不佳。

即使我输入firebase中存在的用户名

,快照也始终为null

我已经检查了论坛并尝试了不同用户的不同解决方案,但没有解决我的问题,所以也许我做错了什么?

这是我的规则

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
      "users": {
        "$uid": {
          "profile":{
            ".indexOn":["username"]
          }
        }
      }
  }
}

这是我的剧本

//check if username exist in the database
    static func checkIfUsernameExist(username: String, callback: @escaping (_ found: Bool) -> Void){
        print(username)
        let databaseRef = Database.database().reference(withPath: "users")
        databaseRef.queryOrdered(byChild: "profile/username").queryEqual(toValue: username).observeSingleEvent(of: .value, with: { (snapshot) in
            print(snapshot)
            callback(snapshot.exists())
        })
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

根据我有限的经验,我在databaseRef

之后添加.child
databaseRef.child("users").queryOrdered(byChild: "profile/username").queryEqual(toValue: username).observeSingleEvent(of: .value, with: { (snapshot) in
        print(snapshot)
        callback(snapshot.exists())
    })

至于.indexOn,一旦你的数据增长,它将有所帮助。