Firebase segue身份验证

时间:2017-02-02 23:11:56

标签: ios swift firebase firebase-authentication

目前,我正在使用Firebase身份验证并处理许多错误,例如错误的用户名,密码,空字段等,一切正常。但是,当我尝试将segue添加到下一页并使用数据库中不存在的随机电子邮件时,Firebase auth没有给我任何错误,只是将用户传递到下一页。当我删除segue并放置随机用户时,它给我一个错误,找不到这样的用户,这是我试图用segue实现的。请告知,可能是什么问题?

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

2 个答案:

答案 0 :(得分:2)

hybridcattt是正确的。我将添加一个更具体的答案。使用segue时,请确保下一个屏幕没有直接连接按钮,否则无论您正在等待的结果如何,它都会在您点按它时立即触发。

将视图控制器连接到下一个视图控制器,如下所示:

enter image description here

然后在该segue中添加标识符

最后,当你得到你正在等待的东西时(例如成功登录),然后执行 performSegue

答案 1 :(得分:0)

如果要在故事板中创建segue,它会立即触发并打开下一个视图控制器。您拥有的登录代码是异步的,故事板不会等待它。

如果配置了segue(尝试在那里添加断点),很可能甚至不会调用loginBtnTapped方法