Обработка ошибок аутентификации Firebase 5 в Swift 4 - PullRequest
0 голосов
/ 09 июня 2018

У нас есть существующий проект, который недавно был обновлен до Firebase 5, Swift 4, и наша обработка ошибок аутентификации, похоже, не работает.

Я нашел несколько ответов здесь на SO, но они больше не работаютпредставляется применимым:

Обработка ошибок

Коды аутентификации

Предположим, что пользователь входит в систему и вводит действительныйадрес электронной почты и неверный пароль, которые передаются в следующий код для проверки подлинности

Auth.auth().signIn(withEmail: user, password: pw, completion: { (auth, error) in
    if error != nil {
        let errDesc = error?.localizedDescription
        print(errDesc!) //prints 'The password is invalid'
        let err = error!
        let errCode = AuthErrorCode(rawValue: err._code)
        switch errCode {
        case .wrongPassword: //Enum case 'wrongPassword' not found in type 'AuthErrorCode?'
            print("wrong password")
        default:
            print("unknown error")
        }
    } else {
        print("succesfully authd")
    }
})

. Ранее мы могли использовать FIRAuthErrorCode для сравнения с возможными ошибками, такими как FIRAuthErrorCodeInvalidEmail, FIRAuthErrorCodeWrongPassword и т. д., но код, указанный выше, не будет скомпилирован должным образомк этому ошибка в этой строке

case .wrongPassword:   Enum case 'wrongPassword' not found in type 'AuthErrorCode?'

странно, если я использую автозаполнение, набрав

case AuthErrorCode.wr

.wrongPassword, является выбираемой опцией, и при выборе компилятор показывает

Enum case 'wrongPassword' is not a member of type 'AuthErrorCode?'

, хотя это был выбираемый вариант.

1 Ответ

0 голосов
/ 14 июня 2018

Вы должны обработать код ошибки путем преобразования Error в NSError.

  Auth.auth().signIn(withEmail: email, password: password) { (authResult, error) in
    switch error {
    case .some(let error as NSError) where error.code == AuthErrorCode.wrongPassword.rawValue:
      print("wrong password")
    case .some(let error):
      print("Login error: \(error.localizedDescription)")
    case .none:
      if let user = authResult?.user {
        print(user.uid)
      }
    }
  }
...