2016-10-01 4 views
1

Ich habe eine Log-in-Szene mit Firebase Auth eingerichtet. Wenn Sie die richtigen Details eingeben, sollte sich die Szene ändern, indem Sie den "loggedIn" -Schnitt ausführen. Bei der Eingabe falscher Details sollte der Fehler auf der Konsole ausgegeben werden und nichts sollte passieren.IOS swift firebase auth falsche Anmeldung

Ich habe festgestellt, dass trotz der Übernahme des Fehlers (und Drucken auf der Konsole), der Controller immer noch den Übergang und bewegt sich zum nächsten Bildschirm (aber es "LOGGING IN" auf der Konsole nicht drucken). Dieses Verhalten sehr merkwürdig finden, irgendwelche Ideen?

ich meine Login-View-Controller unten kopiert haben:

import Foundation 
import Firebase 
import FBSDKCoreKit 
import FBSDKLoginKit 

class LogInViewController: UIViewController{ 
@IBOutlet weak var Email: UITextField! 
@IBOutlet weak var Password: UITextField! 

@IBAction func Login(_ sender: AnyObject) { 
    let email = self.Email.text! 
    let password = self.Password.text! 

    if (email != "" && password != ""){ 
     FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in 
      if(error==nil){ 
       print("LOGGING IN") 
       self.performSegue(withIdentifier: "loggedIn", sender: nil) 
      } 
      else{ 
       print("COULDNT LOG IN") 
       print(error) 
      } 
     }) 
    } 
    else{ 
     let alert = UIAlertController(title: "Error", message: "Enter email and password", preferredStyle: .alert) 
     let action = UIAlertAction(title: "OK", style: .default, handler: nil) 
     alert.addAction(action) 
     self.present(alert, animated: true, completion: nil) 
    } 
} 
} 

Storyboard

EDIT

Storyboard with navigation controller and segues removed

ich die Storyboard-ID loggedInViewControllerVC_ID zum mealViewController hinzugefügt haben in der Identitätsprüfer.

Das ist mein neuer Code:

import Firebase 
import FBSDKCoreKit 
import FBSDKLoginKit 

class LogInViewController: UIViewController{ 

@IBOutlet weak var Email: UITextField! 
@IBOutlet weak var Password: UITextField! 
@IBAction func Login(_ sender: AnyObject) { 
    let email = self.Email.text! 
    let password = self.Password.text! 

    if (email != "" && password != ""){ 
     FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in 
      if(error==nil){ 
       print("LOGGING IN") 
       let nextViewController = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "loggedInViewControllerVC_ID") as! MealViewController 
       self.navigationController?.pushViewController(nextViewController, animated: true) 
       //self.performSegue(withIdentifier: "loggedIn", sender: nil) 
      } 
      else{ 
       print("COULDNT LOG IN") 
       print(error) 
      } 
     }) 
    } 
    else{ 
     let alert = UIAlertController(title: "Error", message: "Enter email and password", preferredStyle: .alert) 
     let action = UIAlertAction(title: "OK", style: .default, handler: nil) 
     alert.addAction(action) 
     self.present(alert, animated: true, completion: nil) 
    } 
} 
} 

Ich bin jetzt ein BAD_INSTRUCTION Fehlerdetails auf erfolgreich Eingabe Login bekommen

Antwort

1

Wenn Sie Ihre Schaltfläche in Ihrem Storyboard LoogedIn Viewcontroller über segue angeschlossen haben. Es wird die Benutzeroberfläche überleiten. Was Sie tun können, ist Instanziieren Sie Ihre ViewController und dann segue hin und her.

Löschen Sie diesen Abschnitt vom Storyboard.

let loggedInScene = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "loggedInViewVontrollerVC_ID") as! loggedInViewVontroller 

self.navigationController?.pushViewController(loggedInScene, animated: true) 

PS: - loggedInViewVontrollerVC_ID ist Ihr storyboardID für die LoggedIn Viewcontroller

die Viewcontroller Wählen Sie in Ihrem Storyboard segue wollen -> Identity Inspektors> Storyboard ID ->loggedInViewVontrollerVC_ID .

Und stellen Sie sicher, dass Sie in Ihrem ersten ViewController in den Navigationscontroller eingebettet haben.

+0

Leider verstehe ich Ihre Antwort nicht - gibt es keine Möglichkeit, dies zu tun, ohne den Übergang vom Storyboard zu löschen und meinen ursprünglichen Ansatz zu verwenden? Es ist schwer zu folgen, welcher Controller sich auf die Login-Szene bezieht und welche auf die folgende Szene in deiner Antwort. – benjanisa

+0

Ich habe einen Link zu einem Screenshot meines Storyboards für den Kontext hinzugefügt. Soll das Storyboard-ID das des Navigations-Controllers oder des View-Controllers sein? Wie kann ich den Navigationscontroller in den ersten viewController einbetten? Ich habe das nur durch die Storyboard-Ansicht gemacht. Könnten Sie bitte auch erklären, warum meine derzeitige Methode immer noch mit falschen Login-Daten einhergeht? – benjanisa

+0

Bitte beachten Sie meine Updates in der obigen Ausgabe (Ich habe Änderungen vorgenommen). Haben Sie versucht, Ihren Anweisungen zu folgen - scheinen etwas falsch zu machen. – benjanisa