我想检查用户名是否存在。
但是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())
})
}
答案 0 :(得分:1)
根据我有限的经验,我在databaseRef
之后添加.childdatabaseRef.child("users").queryOrdered(byChild: "profile/username").queryEqual(toValue: username).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
callback(snapshot.exists())
})
至于.indexOn,一旦你的数据增长,它将有所帮助。