Чтение 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);
}