Firebase Auth和Swift:检查数据库中是否已经有电子邮件

时间:2019-06-28 11:51:18

标签: ios swift firebase firebase-authentication

我正在使用iOS应用程序,该应用程序将使用Firebase进行用户管理(注册,登录等)

我是Firebase的新手,但是一切正常。我已经连接好了,已经创建了用户并登录,等等。

但是,我正在尝试更改用户界面,以使“注册”按钮最初处于隐藏状态,并且仅在以下情况下显示:

  1. 所有字段都不为空
  2. 电子邮件地址有效(使用正则表达式)
  3. 数据库中尚未存在的电子邮件地址
  4. 用户名尚未在数据库中
  5. 密码和confirmPassword字段相等

我不知道#3和#4。

我一直在阅读文档,观看视频,在StackO以及其他地方追踪链接,但是我不知道该怎么办。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是电子邮件和密码身份验证,则解决方案非常简单。

Firebase身份验证不允许重复的电子邮件,因此,当执行createUser函数时,如果电子邮件已经存在,Firebase将在error参数中返回emailAlreadyInUse错误。然后,您可以将其转换为NSError,以查看它是哪一个并进行适当处理。

所以功能就是这样

Auth.auth().createUser(withEmail: createEmail, password: password ) { user, error in
   if let x = error {
      let err = x as NSError
      switch err.code {
      case AuthErrorCode.wrongPassword.rawValue:
         print("wrong password")
      case AuthErrorCode.invalidEmail.rawValue:
         print("invalid email")
      case AuthErrorCode.accountExistsWithDifferentCredential.rawValue:
         print("accountExistsWithDifferentCredential")
      case AuthErrorCode.emailAlreadyInUse.rawValue: //<- Your Error
         print("email is alreay in use")
      default:
         print("unknown error: \(err.localizedDescription)")
      }
      //return
   } else {
      //continue to app
   }

我在该case语句中添加了一些随机错误,但请检查链接以获取所有AuthErrorCode的完整列表。

您也可以这样做

Auth.auth().fetchSignInMethods(forEmail: user, completion: { (signInMethods, error) in
    print(signInMethods)
})

答案 1 :(得分:0)

我认为您可以使用此方法进行检查

   let ref1 = Database.database().reference().child("Users").queryOrdered(byChild: "UserName").queryEqual(toValue: "UserName enter by user")

        ref1.observeSingleEvent(of: .value) { (sanpshot) in

            print(sanpshot.exists()) // it will return true or false
        }

与电子邮件相同。