IOS swift firebase auth错误登录

时间:2016-10-01 11:20:50

标签: ios swift firebase firebase-authentication

我使用Firebase Auth设置了一个登录场景。在输入正确的细节时,场景应该通过执行“loggedIn”segue来改变。输入错误的详细信息时,错误应该打印到控制台,不会发生任何事情。

我发现尽管拿起错误(并将其打印到控制台),控制器仍然执行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

我已将Storyboard 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)
    }
}
}

我现在在成功输入登录详细信息时收到BAD_INSTRUCTION错误

1 个答案:

答案 0 :(得分:1)

如果您已将故事板中的按钮通过segue连接到 LoogedIn viewController。它会使UI变为现实。你可以做的是实例化你的viewController,然后来回传递。

从故事板中删除该segue。

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

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

PS : - loggedInViewVontrollerVC_ID是您登录的viewController的storyboardID

在故事板中选择要转换的viewController - > Identity Inspector-> StoryBoard ID - > loggedInViewVontrollerVC_ID

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