2017-02-02 8 views
1

現在、私はFirebase認証を使用していて、間違ったユーザ名、パスワード、空のフィールドなど多くのエラーを処理しています。しかし、次のページにセグを追加し、データベースに存在しないランダムな電子メールを使用しようとすると、Firebaseの認証は私にエラーを与えず、次のページに渡します。 segueを削除してランダムなユーザーを置くと、segueで達成しようとしているユーザーを見つけることができないというエラーが表示されます。何が問題なのかアドバイスしてください。Firebase segue authentication

のAuthServiceファイル

func login(email: String, password: String, onComplete: Completion?) { 
    FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in 
     if error != nil { 
      self.handleFirebaseError(error: error! as NSError, onComplete: onComplete) 
     } else { 
      onComplete?(nil, user) 
     } 

    }) 
} 

func handleFirebaseError(error: NSError, onComplete: Completion?) { 
    print(error.debugDescription) 
    if let errorCode = FIRAuthErrorCode(rawValue: error.code) { 
     switch (errorCode) { 
     case .errorCodeInvalidEmail: 
      onComplete?("Invalid email address", nil) 
      break 
     case .errorCodeWrongPassword: 
      onComplete?("Invalid password", nil) 
      break 
     case .errorCodeUserNotFound: 
      onComplete?("Can't find user", nil) 
      break 
     default: 
      onComplete?("There was a problem authentication. Try again", nil) 
     } 
    } 
} 

のViewController

@IBAction func loginBtnTapped(_ sender: Any) { 
    if let email = emailField.text, let pass = passwordField.text , (email.characters.count > 0 && pass.characters.count > 0) { 
     AuthService.instance.login(email: email, password: pass, onComplete: { (errMsg, data) in 
      guard errMsg == nil else { 
       self.alert(title: "Error Authentication", errMsg: errMsg!) 
       return 
      } 
     }) 
    } else { 
     self.alert(title: "Username and password required", errMsg: "You must enter both a username and a password") 
    } 
} 

答えて

1

hybridcatttが正しいか(そこにブレークポイントを追加してみてください)あなたはセグエを設定した場合loginBtnTappedメソッドが呼び出されさえされていない可能性が非常に高いです。より具体的な回答を追加します。セグを使用するときは、次の画面がボタンから直接接続されていないことを確認してください。そうしないと、待っている結果にかかわらず、タップするとすぐに起動します。

enter image description here

をし、そのセグエにindentifierを追加します。

はそうのように、次のビューコントローラに代わり、あなたのビューコントローラを接続します。

最後に、何かを待っているとき(ログインに成功したなど)、performSegueを実行します。

+0

ありがとうございました!私はあなたの指示に従い、問題は解決されました! – Sargot

+0

あなたは大歓迎です。あなたはあなたの質問に対する答えとしてこれを選ぶことができます。 :) – Glenn

+1

既にそれをしました) – Sargot

0

あなたはストーリーボードにセグエを作成している場合、それはすぐに起動すると、次のビューコントローラを開きます。あなたが持っているログインコードは非同期で、ストーリーボードはそれを待たない。