2016-10-01 91 views
1

我使用Firebase身份验证设置了登录场景。在输入正确的细节时,场景应该通过执行“loggedIn”segue进行更改。在输入不正确的细节时,错误应该打印到控制台并且什么都不应该发生。iOS swift firebase auth不正确登录

我发现,尽管发现错误(并将其打印到控制台),控制器仍然执行segue并移至下一个屏幕(但不会将“LOGGING IN”打印到控制台)。发现这种行为很奇怪,有什么想法?

我抄我的日志在视图控制器下面:

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

编辑

Storyboard with navigation controller and segues removed

我在加入故事板ID loggedInViewControllerVC_ID到mealViewController身份检查员。

这是我的新代码:

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

现在我对成功输入登录信息

回答

1

如果你已经在你的故事板通过赛格瑞连接您的按钮LoogedIn的viewController得到一个BAD_INSTRUCTION错误。它会延续UI。你可以做的是实例化你的viewController,然后来回延伸。

从故事板中删除该segue。

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

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

PS: - loggedInViewVontrollerVC_ID是你对的loggedIn的viewController

storyboardID选择的viewController要Segue公司在故事板 - >身份监察长>故事板ID - >loggedInViewVontrollerVC_ID

并确保您已在第一个viewController中的导航控制器中嵌入。

+0

不幸的是,我不明白你的答案 - 没有办法做到这一点,而不删除从故事板和使用我原来的方法segue?努力遵循哪个控制器引用登录场景,并在您的答案中指向以下场景。 – benjanisa

+0

我添加了一个指向我的情节串连图板的屏幕截图的链接。故事板ID应该是导航控制器还是视图控制器之后?另外,如何在第一个viewController中嵌入导航控制器?我只有通过故事板视图才能完成此操作。你能否也请解释为什么我目前的方法仍然因错误的登录细节而停滞不前? – benjanisa

+0

请在上面的问题中查看我的更新(我已编辑)。试过按照你的指示 - 似乎做错了什么。 – benjanisa