Firebase Swift memicu Cloud Function saat dihapus

Oct 02 2020

Saya ingin menggunakan fungsi pemicu saat hapus di dalam proyek saya di mana saya pertama kali menghapus pengguna dari otentikasi dan setelah itu menghapus pengguna dari database.

Di tautan yang disediakan adalah contoh, tetapi saya tidak dapat membuatnya berfungsi di Swift. Katakanlah saya bisa membuatnya bekerja, dapatkah saya memanggil sesuatu seperti ini? Atau Auth.auth().currentUsertidak tersedia lagi? Dan apakah ada solusi untuk itu?

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)
        }
    }
}

Saya tahu saya dapat menghapus pengguna dari database terlebih dahulu dan dari otentikasi setelahnya, tetapi itu kurang sesuai untuk kasus penggunaan saya. Adakah yang bisa membantu saya di sini? Selain itu, beri tahu saya jika ada yang tidak jelas dan jika Anda memerlukan informasi lebih lanjut.

Jawaban

1 FrankvanPuffelen Oct 02 2020 at 14:45

Saya pikir Anda mungkin membingungkan beberapa hal di sini.

Cloud Functions ditulis di Node.js, dan dijalankan di server Google - yang memungkinkan mereka merespons peristiwa yang terjadi di proyek Firebase Anda. Anda tidak dapat menanggapi semua peristiwa yang sama, seperti akun pengguna yang dihapus, dalam kode Swift sisi klien Anda. Jadi, meskipun Cloud Functions dapat digunakan untuk menghapus dokumen dari Cloud Firestore sebagai respons terhadap akun pengguna yang dihapus dari Firebase Authentication, Anda tidak dapat melakukannya di kode Swift sisi klien.

Apa yang dapat Anda lakukan dalam kode Swift Anda, adalah menghapus akun pengguna yang saat ini masuk, dan menghapus dokumen mereka dari Firestore. Biasanya urutan untuk melakukannya adalah dengan terlebih dahulu menghapus dokumen, dan baru kemudian menghapus akun, karena menghapus dokumen mungkin / harus mengharuskan pengguna untuk tetap ada dan melakukan otentikasi.

Ini akan menjadi seperti:

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.
          }
        }
    }
}

Kode di atas sebagian besar disalin 1: 1 dari dokumen saat menghapus data dari Firestore dan pengguna dari Firebase Authentication .