2017-03-26 8 views
1

ログイン/サインアップ認証にFirebaseを使用していますが、問題が発生しました。私はセットアップするためのすべてを持って、それは正常に動作しますが、私はログインの部分で少し問題があります。ここでログインが間違っていてもログインできる

は私のコードです:

@IBAction func clickLogin(_ sender: UIButton) { 

    FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

     if let error = error { 
      print(error.localizedDescription) 
     } 
    }) 

    performSegue(withIdentifier: "toMainSegue", sender: self) //Issue 
} 

間違って何電子メールまたはパスワードが間違っているとき、それはまだセグエを実行するということです。

@IBAction func clickLogin(_ sender: UIButton) { 

    FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

     if let error = error { 
      print(error.localizedDescription) 
     } else { 
      performSegue(withIdentifier: "toMainSegue", sender: self) //Error Line 
     } 
    }) 
しかし、私はエラーを取得する:私が試した

Implicit use of ‘self’ in closure, use ‘self.’ to capture semantics explicit.

は、ログインが成功した場合だけ、次のUIにユーザーをもたらすのより良い方法はありますか?

答えて

1

は@IBAction内ではなくサインインも(:パスワード完了withEmail)の完了ハンドラ内で呼ばれています。したがって、後者で何が書かれているか実行されているかにかかわらず、performSegue(withIdentifier:sender:)が呼び出されます。ロジックは、クロージャ内で実行されているので、あなたはメソッドと変数の前にself.接頭辞を指定する必要が、あることに注意してください、次の

@IBAction func clickLogin(_ sender: UIButton) { 

     FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

      if let error = error { 
       print(error.localizedDescription) 
      } else { 
       self.performSegue(withIdentifier: "toMainSegue", sender: self) 
      } 
     }) 
    } 

にコードを変更してみてください!

0

ブロック内で使用されるvariablesまたはmethodsは、‘self’の使用が必要です。

@IBAction func clickLogin(_ sender: UIButton) { 

FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

    if let error = error { 

     print(error.localizedDescription) 


    } else { 
     self.performSegue(withIdentifier: "toMainSegue", sender: self) //Error Line 
    } 
}) 
0

ログイン資格情報が間違っていても、APIが正常に機能するたびにコードがelse部分に入ります。

FIRAuth APIは、ヒットしたときにデータを返さなければなりません。たとえば、 "success" = 1または0という文字列や辞書などです。成功した場合はurをチェックしてください。誤った資格情報であり、正しい資格情報であることは間違いです。

エラー部分は、ネットワークエラーやAPIのパラメータが間違った形式やその他のエラーになっているなど、API自体にヒットしたときに実行されます。

あなたのケースでは、ヒットして結果を返すこともあります。ユーザーがログインしたかどうかを確認し、その結果に基づいて次のコントローラーにセグメントする場合は、結果ディクショナリーをチェックする必要があります。

0

これを試してください。これが私のログイン方法です。

FIRAuth.auth()?.signIn(withEmail: emailField.text!, password: passwordField.text!, completion: { user, error in 
     if error == nil { 
      print("Successfully Logged IN \(user!)") 
      self.performSegue(withIdentifier: "signedIn", sender: self) 
     } 
    }) 

これは、署名プロセスでエラーがないかどうかをテストしてから、segueを実行します。私はそれに何の問題もありませんでした、そして、それはうまくいくようです。方法あなたが

@IBAction func clickLogin(_ sender: UIButton) { 

    FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

     if let error = error { 
      print(error.localizedDescription) 
     } 
    }) 

    performSegue(withIdentifier: "toMainSegue", sender: self) //Issue 
} 

performSegue(withIdentifier:sender:)方法を共有しているコードで

関連する問題