目前,我正在使用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")
}
}
答案 0 :(得分:2)
hybridcattt是正确的。我将添加一个更具体的答案。使用segue时,请确保下一个屏幕没有直接连接按钮,否则无论您正在等待的结果如何,它都会在您点按它时立即触发。
将视图控制器连接到下一个视图控制器,如下所示:
然后在该segue中添加标识符。
最后,当你得到你正在等待的东西时(例如成功登录),然后执行 performSegue 。
答案 1 :(得分:0)
如果要在故事板中创建segue,它会立即触发并打开下一个视图控制器。您拥有的登录代码是异步的,故事板不会等待它。
如果配置了segue(尝试在那里添加断点),很可能甚至不会调用loginBtnTapped方法