【问题标题】:Firebase query can't find email address?Firebase 查询找不到电子邮件地址?
【发布时间】:2016-05-30 13:29:13
【问题描述】:

我的 Firebase 数据库中有一个名为“users”的密钥,其中包含电子邮件和姓名的密钥。我正在尝试创建一个简单的查询,该查询将根据电子邮件地址查找用户,但查询未返回任何结果。

let rootRef = FIRDatabase.database().reference()
let email = emailTextField.text

rootRef.child("users").queryEqualToValue(email, childKey: "users").observeEventType(.Value, withBlock: { snapshot in
        if snapshot.exists() {
            print("user exists")

        } else if !snapshot.exists(){
            print("user doesn't exist")

        }
    })

即使电子邮件文本字段与我的数据库中显示的内容相同,我的控制台也会始终打印“用户不存在”。

有什么想法吗?

谢谢!!

【问题讨论】:

    标签: swift firebase swift2 firebase-realtime-database


    【解决方案1】:

    试试这个:

    let usersRef = self.rootRef.childByAppendingPath("users")
    let email = emailTextField.text
    
    usersRef.queryOrderedByChild("email").queryEqualToValue(email)
                    .observeEventType(.Value, withBlock: { snapshot in
         if snapshot.exists() {
              print("user exists")
    
         } else {
              print("user doesn't exist")
    
         }
    })
    

    您需要小心... .Value 将返回电子邮件地址与您要查找的地址相同的所有节点。一般来说,如果有 5 个,则 .Value 将包含所有 5 个,因此迭代快照会更安全。

    for child in snapshot.children {
       let email = child.value["whatever key:value you want"] as! String
    }
    

    【讨论】:

    • 谢谢!!那效果很好。感谢您提供有关迭代快照的额外提示。像魅力一样工作。
    • 抱歉添加到这里。如何获取快照的 ID? print(snapshot.key) 返回“用户”,而不是像“12EEWekLr5bqb4J9GilGvKjgWmp1”这样的实际用户 ID。我可以使用child.value["email"] 轻松获取用户电子邮件,但实际用户 ID 不是我可以获取的命名元素。
    • @james 没问题,答案很简单。请记住,当通过 .Value 查询时,您应该使用我的答案中的第二个代码 sn-p 遍历快照中返回的子项。在该 sn-p 中,要访问任何特定字段,请使用 let name = child.value["name"] as!字符串。要访问每个孩子的密钥,请使用 let key = child.key as String!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多