Я пытаюсь реализовать регистрацию для входа в приложение с помощью Firebase Firestore. Проблема заключается в том, что мне удается правильно выполнить регистрацию и, когда я регистрирую пользователя, я могу сохранить в firebase определенную информацию, которую я хочу восстановить при входе пользователя.
Для этого я используйте firebase auth (что работает отлично), чтобы получить идентификатор пользователя, а затем попросите Firestore (здесь у меня проблема) отправить мне информацию, соответствующую уникальному идентификатору пользователя, который там хранится. Для этого я использую функцию asyn c:
private func retrieveLogInData(completion: @escaping (String, String, String) -> Void){
//Firestore reference
let userID = Auth.auth().currentUser!.uid
let dbRef = Firestore.firestore().collection("users").document(userID)
//Asking for the document
dbRef.getDocument(){ (snapShot, err) in
if let data = snapShot?.data() {
let c = data["c"]
let uc = data["uc"]
let pc = data["pc"]
//just to debug we add any response
completion(c as! String, uc as! String, pc as! String)
}else{
print("Error")
//just to debug we add any response
completion("no","no","no")
}
}
}
Вызов выполняется из функции auth:
@IBAction func LogInButton(_ sender: UIButton) {
userName=userIDTextField.text;
Auth.auth().signIn(withEmail: userName, password: passWord) {
(authResult, error) in
if (error != nil){
var returnedErrorMessage : String = ""
if let errCode = AuthErrorCode(rawValue: error!._code) {
switch errCode {
case .invalidEmail:
returnedErrorMessage = "Not a valid email address."
case .wrongPassword:
returnedErrorMessage = "eMail and password combination is not valid"
case .userNotFound:
returnedErrorMessage = "eMail and password combination is not valid"
case .networkError:
returnedErrorMessage = "Unable to connect to the server. Check internet connection"
case .missingEmail:
returnedErrorMessage = "Missing email. Please provide a valid email adress"
case .nullUser:
returnedErrorMessage = "Missing email. Please provide a valid email adress"
default:
returnedErrorMessage = "Unkwown error. Try again"
}
}
self.errorMessageLabel.text=returnedErrorMessage
}else{
self.retrieveLogInData{(c, uc, pc) in. //<----MY PROBLEM COMES HERE
print("c")
print("here!") //FOR DEBUGGING
}
Когда я отлаживаю, я вижу, что в retrieveLogInData функция, когда вызывается предложение debrief.getDocument(){ (snapShot, err)
. Поток напрямую переходит к коду и выходит из него, ничего не делая.
Если я проверяю идентификатор документа, он работает. Функция достигает этого. Проблема возникает при получении информации (вызов getDocument).
Буду признателен за любую помощь.
Спасибо!