我正在我的应用中设置firebase身份验证。我遇到的错误是,每次使用不正确的登录凭据轻触登录时,都会调用auth正确时运行的块。所以假设我尝试登录不正确,3次,当我最终正确登录时(第四次尝试),我的segue执行了4次。
@IBAction func signInTapped(sender: UIButton) {
if let email = self.usernameTextField.text {
if let password = self.passwordTextField.text {
FIRAuth.auth()?.signInWithEmail(email, password: password) { (user, error) in
FIRAuth.auth()?.addAuthStateDidChangeListener { auth, user in
if user != nil {
self.performSegueWithIdentifier("loggedInSegue", sender: self)
NSUserDefaults.standardUserDefaults().setValue(true, forKey: "loggedIn")
NSUserDefaults.standardUserDefaults().setValue(email, forKey: "email")
NSUserDefaults.standardUserDefaults().setValue(password, forKey: "password")
} else {
self.incorrectLoginAnimation(self.passwordTextField)
self.incorrectLoginAnimation(self.usernameTextField)
}
}
}
}
}
}
我是否错误地使用了sighInWithEmail函数?有没有更好的方法来验证是否输入了正确的凭证?
答案 0 :(得分:3)
试试这个:
FIRAuth.auth()?.signInWithEmail(email, password: password) { (user, error) in
if user != nil {
self.performSegueWithIdentifier("loggedInSegue", sender: self)
NSUserDefaults.standardUserDefaults().setValue(true, forKey: "loggedIn")
NSUserDefaults.standardUserDefaults().setValue(email, forKey: "email")
NSUserDefaults.standardUserDefaults().setValue(password, forKey: "password")
} else {
self.incorrectLoginAnimation(self.passwordTextField)
self.incorrectLoginAnimation(self.usernameTextField)
}
}
这是相同的代码,但我删除了addAuthStateDidChangeListener。登录时,您不需要它。