삭제시 Swift Firebase 트리거 Cloud 함수

Oct 02 2020

먼저 인증에서 사용자를 삭제 한 후 데이터베이스에서 사용자를 삭제하는 프로젝트 내 에서 on delete 트리거 기능 을 사용하고 싶습니다 .

제공된 링크에는 예제가 있지만 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 FrankvanPuffelen Oct 02 2020 at 14:45

여기서 몇 가지 혼란 스러울 수 있습니다.

Cloud Functions는 Node.js로 작성되고 Google 서버에서 실행되므로 Firebase 프로젝트에서 발생하는 이벤트에 응답 할 수 있습니다. 클라이언트 측 Swift 코드에서 삭제되는 사용자 계정과 같은 모든 동일한 이벤트에 응답 할 수는 없습니다. 따라서 Firebase 인증에서 사용자 계정이 삭제되면 Cloud Functions를 사용하여 Cloud Firestore에서 문서를 삭제할 수는 있지만 클라이언트 측 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에서 데이터를 삭제 하고 중포 기지 인증에서 사용자를 삭제 .