比较textfield.text到firebase string swift

时间:2016-12-29 19:56:05

标签: swift firebase firebase-realtime-database firebase-authentication

我在Firebase中有一个具有单独用户节点的数据库。在每个用户的节点中将是与他们有关的数据并且将是私有的。除此之外,我想创建一个只是已注册电子邮件集合的节点。原因是当用户登录VC并且用户键入电子邮件时...如果电子邮件已经注册,则图像视图将变为绿色。但是,如果电子邮件不在数据库中(或者如果它与电子邮件地址格式不匹配),则图像将为红色。

之前关于我之前问题的答案说明我需要更改'。'电子邮件地址中的','。因此@ gmail.com将存储为gmail,com

我知道了。

FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in

    if error == nil {

      let email = firstContainerTextField.text ?? ""

      let newString = email.replacingOccurrences(of: ".", with: ",", options: .literal, range: nil)

      self.ref.child("users").child("allUsers").child(newString).setValue(true)

      self.ref.child("users").child((user?.uid)!).setValue(["Email": email])

      FIRAuth.auth()!.signIn(withEmail: email,
                             password: password)

    } else {
      //registration failure
    }

这是来自新用户VC(部分)的代码。

因此,在Firebase控制台

上显示“users”和“allUsers”的节点如下所示
users
    allUsers
        bob@bob,com: true
        ted@ted,com: true

“真正的”部分只是因为我可以将bob @ bob,com放到数据库中......真正的部分永远不会用于任何事情。

在VC中登录我老实说无法弄清楚该怎么做

之前的回答说要使用

hasChildren() 

然后我用它然后用谷歌搜索该怎么做 我试过用这样的东西

ref.child("users").child("allUsers").queryEqual(toValue: newString)
  .observe(.value, with: { snapshot in

if snapshot.hasChildren() {

    for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
    ....


}



  });

但我似乎无法随心所欲。

如何查看textfield.text ==已存储在firebase中的电子邮件?

(比较时我确实将'。'转换为',')

1 个答案:

答案 0 :(得分:1)

请勿使用电子邮件地址作为密钥。电子邮件地址是动态的,可能会发生变化(如果用户想要更改它们),如果他们这样做,您手上就会弄得一团糟,因为每个直接使用该电子邮件的节点都会被删除并重新创建

最佳做法是将密钥与其中包含的数据取消关联。

这里是使用的结构

emails
  -Yiaisjpa90is
    email: "dude@test.com"
  -Yijs9a9js09a
    email: "thing@test.com"

然后您只需在电子邮件节点中查询您要查找的电子邮件,并相应处理(如果存在)。

还有一些代码

emailsRef.queryOrdered(byChild: "email").queryEqual(toValue: "dude@test.com")
         .observe(.value, with: { snapshot in
     if snapshot.value is NSNull {
        print("the snapshot was null, no email found")
     } else {
        print("email was found, YIPEE")
     }  
})

为了完整起见,使用

会更加快捷
if snapshot.exists() {
  print("found it")
} else {
  print("no email found")
}