【发布时间】:2019-12-24 16:32:12
【问题描述】:
我已经为 Firestore 数据库实现了 Auth 方法,但是当用户尝试使用相同的电子邮件注册时,应用程序崩溃了。我想实现一个函数来检查电子邮件是否已经存在(如果存在,则触发 UIAlert,否则,创建一个新用户)。
到目前为止:
Auth.auth().createUser(withEmail: email, password: password) { (Result, err) in
let db = Firestore.firestore()
let docRef = db.collection("email users").document("email")
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let emailAlreadyInUseAlert = UIAlertController(title: "Error", message: "Email already registered", preferredStyle: .alert)
emailAlreadyInUseAlert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
self.present(emailAlreadyInUseAlert, animated: true, completion: nil)
return
} else {
let db = Firestore.firestore()
db.collection("email users").addDocument(data: [
"firstName": firstName,
"lastName": lastName,
"email": email,
"created": Timestamp(date: Date()),
"uid": Result!.user.uid
])
}
self.transitionToHome()
}
}
}
}
func transitionToHome() {
let homeViewController = storyboard?.instantiateViewController(identifier: "HomeViewController") as? HomeViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()
}
}
- 在此代码中,UIAlert 不会触发,并且在以下位置出现错误:"uid": Result!.user.uid - 线程 1:致命错误:在展开可选值时意外发现 nil。使用唯一电子邮件创建新用户时,它会正常工作,用户已创建。
- 如果我将 if let document = document, document.exists 更改为 if error !=nil,我会在电子邮件已存在以及不存在时收到 UIAlert存在,创建用户的代码不执行。
- 甚至尝试实现addsnapshotlistener,但没有成功。
有什么建议吗?谢谢
【问题讨论】:
标签: swift firebase authentication google-cloud-firestore firebase-authentication