拥有用户注册表,我们想输入一个电子邮件地址,然后返回UID。
有没有办法迅速做到这一点?
我们希望函数返回它。
就像我们在功能中输入user@user.com一样,它将返回gSVeU6。...
任何提示和建议都是值得赞赏的人。
func findFriendsUIDFromFirebase(selectedFriendsEmail: String) {
print("Hey from findFriendsUIDFromFirebase called")
fir.child("registeredUsersOnPlatform").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
guard let allTheUsers = snapshot.value as? [String:String] else {
print("Something is wrong with this snapshot")
return
}
if let selectedUserUIDFromFirebase = allTheUsers.someKey(forValue: selectedFriendsEmail) {
//DO STUFF
基本上,通过这种方式,我们在本地下载所有内容,然后遍历字典,但我正在寻找一种更好的方式,该方式不涉及下载整个内容。也许带有.equals()的东西?
同时,由于某些原因,在打印字典时,它似乎停留在100个键值对中。当实际桌子上有300对。在某处有些剪裁。
答案 0 :(得分:1)
您需要针对要查找的特定值执行Firebase query:
let queryEmail = "Userone@user.com"
fir.child("registeredUsersOnPlatform").queryOrderedByValue().queryEqual(toValue: queryEmail).observeSingleEvent(of: .value) { (querySnapshot) in
for result in querySnapshot.children {
let resultSnapshot = result as! DataSnapshot
print (resultSnapshot.key)
}
}
您还可以使用.queryLimited(toFirst: x)
答案 1 :(得分:0)
如果要在Firebase中创建用户时获取密钥,可以在用户回叫数据中获取它们,例如:
Auth.auth().createUser(withEmail: email, password: pwd) { (user, _) in
print(user?.uid)
}
否则,如果要从常规列表数据中的值获取键,以便使用queryEqualToValue然后打印快照的子键