web-dev-qa-db-ja.com

スローされたFirebaseAuthエラーの読み取り(Firebase 3.xおよびSwift)

新しいバージョンのFirebaseでFIRAuthErrorNameKeyを読み取る方法がわかりません。以下は私がこれまでに持っているものですが、「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
            }
        }
 })
11
Ben

これを試して。これは私にとってはうまくいきます。また、これをプロジェクトに貼り付けた後。すべての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")
            }
        }
38

答えはどれも最新ではないようです。これが私が現在行っていることです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")

                //...
15
ezmegy

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!")
                }

            }
        }
8
Ahmadiah

スニペットから、スイッチでFIRAuthErrorNameKeyではなくエラーコードを使用しようとしているようです。その場合、使用したいのは、コールバックで返されるNSErrorオブジェクトのエラーコードです。使用する:

let errorCode = error.code

このようにして、errorCode変数に返されたエラーコードが含まれ、エラー処理ロジックを続行できます。

1
Sparq

Xamarin.iOSを使用したソリューションは次のとおりです

C#でラップされたNSErrorであるNSErrorExceptionをキャッチする必要があります

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

これが役立つかどうかはわかりませんが、これも行うことができます:

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

            //do error handling here

     }
0
Gamz Rs