Чтение Firebase Auth Error Thrown (Firebase 3.x и Swift)

У меня проблемы с выяснением, как читать FIRAuthErrorNameKey в новой версии Firebase. Вот что у меня есть, но строка "let errorCode = FIRAuthErrorNameKey" неверна. Прочитав документацию по Firebase, я также попытался получить доступ к коду ошибки из userInfo, но безуспешно, и у меня нет идей.

 // Send request to Firebase to add user to register user
 FIRAuth.auth()?.createUserWithEmail(emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in

        // Check for errors and respond to user accordingly.
        if error != nil {

            let errorCode = FIRAuthErrorNameKey

            switch errorCode {

            case "FIRAuthErrorCodeEmailAlreadyInUse":

                // Add logic accordingly

            case ...:

               // Add logic accordingly

            case default:

              // Add logic accordingly
            }
        }
 })

Ответ 1

Попробуйте это. Это работает для меня. Кроме того, после вставки этого в ваш проект. Если вам нужно увидеть все коды FIRAuthErrorCode. Наведите указатель мыши на .ErrorCodeInvalidEmail, затем нажмите левую кнопку мыши, и он покажет вам остальное.

Если у вас есть какие-либо проблемы, дайте мне знать, и я стараюсь помочь вам. Удачи!

        FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in

            if error != nil {

                if let errCode = FIRAuthErrorCode(rawValue: error!._code) {

                    switch errCode {
                        case .ErrorCodeInvalidEmail:
                            print("invalid email")
                        case .ErrorCodeEmailAlreadyInUse:
                            print("in use")
                        default:
                            print("Create User Error: \(error!)")
                    }
                }

            } else {
                print("all good... continue")
            }
        }

Ответ 2

Ни один из ответов не является актуальным, вот что я делаю в настоящее время на Swift 3.x, FirebaseAuth 4.0.0

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in

        if let error = error as NSError? {

            guard let errorCode = AuthErrorCode(rawValue: error.code) else {

                print("there was an error logging in but it could not be matched with a firebase code")
                return

            }

            switch errorCode {

            case .invalidEmail:

                print("invalid email")

                //...

Ответ 3

Firebase немного изменил код, и если вы новичок в Firebase, вам потребуется немного времени, чтобы ваш код работал. Я провел почти 3 часа, выясняя, что происходит. Вот как это выглядит сейчас:

Auth.auth().createUser(withEmail: email, password: password) { (user: User?, error) in

        if error != nil {
        // Handle the error (i.e notify the user of the error)

            if let errCode = AuthErrorCode(rawValue: error!._code) {

                switch errCode {
                case .invalidEmail:
                    print("invalid email")
                case .emailAlreadyInUse:
                    print("in use")
                default:
                    print("Other error!")
                }

            }
        }

Ответ 4

Из фрагмента похоже, что вы пытаетесь использовать код ошибки, а не FIRAuthErrorNameKey в своем коммутаторе. В этом случае то, что вы хотите использовать, - это код ошибки объекта NSError, возвращаемого в обратном вызове. Использование:

let errorCode = error.code

Таким образом, ваша переменная errorCode будет содержать код ошибки, который был возвращен, и вы можете продолжить свою логику обработки ошибок.

Ответ 5

Я не знаю, поможет ли это, но вы также можете сделать это:

let errcode = FIRAuthErrorCode(rawValue: error!._code)
    if errcode == FIRAuthErrorCode.errorCodeRequiresRecentLogin{

            //do error handling here

     }

Ответ 6

Вот решение с использованием Xamarin.iOS

Вам нужно поймать исключение NSErrorException, которое является завернутым в С# NSError

  try
  {
    await auth.CreateUserAsync(email, password);
  }
  catch (NSErrorException e)
  {
    throw new Exception(e.Error.LocalizedDescription);
  }