Swift Firebase запускает облачную функцию при удалении

#ios #swift #firebase #google-cloud-firestore #firebase-authentication

#iOS #swift #firebase #google-cloud-firestore #firebase-аутентификация

Вопрос:

Я хотел бы использовать функцию запуска при удалении внутри моего проекта, где я сначала удаляю пользователя из аутентификации, а затем удаляю пользователя из базы данных.

В приведенной ссылке приведен пример, но я не могу заставить его работать в Swift. Допустим, я могу заставить это работать, могу ли я вызвать что-то подобное? Или Auth.auth().currentUser больше не доступен? И есть ли какое-то обходное решение для этого?

 Auth.user.onDelete() { 
    let db = Firestore.firestore()
    let user = Auth.auth().currentUser
    db.collection("users").document(user).delete() { err in
        if err != nil {
            Utilities.showErrorPopUp(labelContent: "Fehler", description: err!.localizedDescription)
            finished(false)
        } else {
            finished(true)
        }
    }
}
  

Я знаю, что мог бы сначала удалить пользователя из базы данных, а затем из аутентификации, но это не совсем подходит для моего варианта использования. Кто-нибудь может мне здесь помочь? Кроме того, дайте мне знать, если что-то неясно, и если вам нужна дополнительная информация.

Ответ №1:

Я думаю, здесь вы можете кое-что перепутать.

Облачные функции написаны на Node.js , и запускаются на серверах Google, что позволяет им реагировать на события, происходящие в ваших проектах Firebase. Вы не можете реагировать на все те же события, такие как удаление учетной записи пользователя, в вашем клиентском коде Swift. Таким образом, хотя вполне возможно использовать облачные функции для удаления документа из облачного хранилища Firestore в ответ на удаление учетной записи пользователя при проверке подлинности Firebase, вы не можете этого сделать в своем клиентском коде Swift.

Что вы можете сделать в своем коде Swift, так это удалить учетную запись пользователя, вошедшего в систему в данный момент, и удалить их документ из Firestore. Типичный порядок для этого — сначала удалить документ и только затем удалить учетную запись, поскольку удаление документа, вероятно, / должно требовать, чтобы пользователь все еще существовал и проходил аутентификацию.

Это было бы что-то вроде:

 db.collection("cities").document("DC").delete() { err in
    if let err = err {
        print("Error removing document: (err)")
    } else {
        print("Document successfully removed!")
        let user = Auth.auth().currentUser
    
        user?.delete { error in
          if let error = error {
            // An error happened.
          } else {
            // Account deleted.
          }
        }
    }
}
  

Приведенный выше код в основном скопирован в соотношении 1: 1 из документа об удалении данных из Firestore и удалении пользователя из аутентификации Firebase.

Комментарии:

1. Определенно запутался там… Хорошо, думаю, тогда мне нужно изменить свой поток. Спасибо за ваше объяснение и помощь!