Firebase Auth и Swift: проверьте, есть ли электронная почта в базе данных - PullRequest
0 голосов
/ 28 июня 2019

Я работаю над приложением для iOS, которое будет использовать Firebase для управления пользователями (регистрация, вход и т. Д.)

Я новичок в Firebase, но в основном все идет нормально.Я подключил его, создал пользователей, вошел в систему и т. Д.

Но я пытаюсь изменить свой пользовательский интерфейс, чтобы кнопка «Зарегистрироваться» изначально была скрыта и появлялась только тогда, когда:

  1. все поля не пусты
  2. адрес электронной почты действителен (с использованием регулярных выражений)
  3. адрес электронной почты еще не в базе данных
  4. имя пользователяеще нет в базе данных
  5. поля пароля и verifyPassword равны

Я не могу понять # 3 и # 4.

Я читал документацию, смотря видео, гоняясь за ссылками по всему StackO и за его пределами, но я не могу понять это.

Может кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Если вы используете аутентификацию по электронной почте и паролю, решение очень простое.

Аутентификация Firebase не позволит дублировать электронные письма, поэтому при выполнении функции createUser, если электронная почта уже существует, Firebase вернет ошибку emailAlreadyInUse в параметре error. Затем вы можете привести его к ошибке NSE, чтобы увидеть, какой она есть, и обработать ее соответствующим образом.

Так что функция такая

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
   }

Я добавил несколько случайных ошибок в это утверждение, но проверил ссылку для получения полного списка всех AuthErrorCodes.

Вы также можете сделать это

Auth.auth().fetchSignInMethods(forEmail: user, completion: { (signInMethods, error) in
    print(signInMethods)
})
0 голосов
/ 28 июня 2019

Я думаю, вы можете проверить это, используя этот метод

   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
        }

и то же самое для электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...