【问题标题】:How to use FirebaseAuth error codes?如何使用 FirebaseAuth 错误代码?
【发布时间】:2017-07-27 01:28:12
【问题描述】:

我正在尝试在 Firebase 中使用 AuthErrorCode,但我不断收到错误消息。这是我的代码:

private func handleErrors(err: NSError, loginHandler: LoginHandler?) {

    if let errCode = AuthErrorCode(rawValue: err.code) {

        switch errCode {

        case .errorCodeWrongPassword:  //Enum case 'errorCodeWrongPassword' not found in type 'AuthErrorCode'
            loginHandler?(LoginErrorCode.WRONG_PASSWORD)
            break

        case .errorCodeInvalidEmail:  //Enum case 'errorCodeInvalidEmail' not found in type 'AuthErrorCode'
            loginHandler?(LoginErrorCode.INVALID_EMAIL)
            break

        case .errorCodeUserNotFound:  //Enum case 'errorCodeUserNotFound' not found in type 'AuthErrorCode'
            loginHandler?(LoginErrorCode.USER_NOT_FOUND)
            break

        case .errorCodeEmailAlreadyInUse:  //Enum case 'errorCodeEmailAlreadyInUse' not found in type 'AuthErrorCode'
            loginHandler?(LoginErrorCode.EMAIL_ALREADY_IN_USE)
            break

        case .errorCodeWeakPassword:  //Enum case 'errorCodeWeakPassword' not found in type 'AuthErrorCode'
            loginHandler?(LoginErrorCode.WEAK_PASSWORD)
            break

        default:
            loginHandler?(LoginErrorCode.PROBLEM_CONNECTING)
            break

        }

    }

}

有人知道我做错了什么吗?如果您没有在我的代码中看到错误,它们是:

Enum case 'errorCodeWrongPassword' not found in type 'AuthErrorCode'

Enum case 'errorCodeInvalidEmail' not found in type 'AuthErrorCode'

Enum case 'errorCodeUserNotFound' not found in type 'AuthErrorCode'

Enum case 'errorCodeEmailAlreadyInUse' not found in type 'AuthErrorCode'

Enum case 'errorCodeWeakPassword' not found in type 'AuthErrorCode'

如果你们有什么想法,请告诉我!

【问题讨论】:

    标签: ios swift firebase firebase-authentication


    【解决方案1】:

    它们在 Swift 中以 AuthErrorCode.weakPassword 的形式导入,例如:从所有 case 值中删除 errorCode

    private func handleErrors(err: NSError, loginHandler: LoginHandler?) {
    
        guard let errCode = AuthErrorCode(rawValue: err.code)
            else { return }
    
            switch errCode {
    
            case .wrongPassword:
                loginHandler?(LoginErrorCode.WRONG_PASSWORD) // Transform to wrongPassword
            case .invalidEmail:
                loginHandler?(LoginErrorCode.INVALID_EMAIL)
            case .userNotFound:
                loginHandler?(LoginErrorCode.USER_NOT_FOUND)
            case .emailAlreadyInUse:
                loginHandler?(LoginErrorCode.EMAIL_ALREADY_IN_USE)
            case .weakPassword:
                loginHandler?(LoginErrorCode.WEAK_PASSWORD)
            default:
                loginHandler?(LoginErrorCode.PROBLEM_CONNECTING)
            }
      
    }
    



    快速建议:

    • 不要在 switch 语句中使用break,它们会在 case 完成后默认中断(fallthrough 允许您在匹配后检查每个 case)
    • NSError 切换为 Error(Firebase 使用 NSError,如果您想切换到错误读取 Swift 4 get error code from error
    • Lo​​ginErrorCode 是您的自定义类吗?考虑为大小写切换到 Swift >= 3 语法(小写驼峰式)

    【讨论】:

    • "Switch NSError for Error" - 默认错误类没有代码变量。
    • Firebase 仍然使用 NSError,因此您应该使用 NSError。另请参阅stackoverflow.com/questions/50747048/…
    • 是的,我知道,但是您提到要使用 Error 类而不是 FirebaseAuth 中使用的 NSError
    • 答案已经更新,可能的解决方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多