본문 바로가기

Project/FirebaseTest

FireBase - 회원 탈퇴 (Firestorage 폴더 삭제)

deleteUser 메서드 

public func deleteUser(completion: @escaping (Bool, Error?) -> Void) {
        guard let user = Auth.auth().currentUser else {
            completion(false, NSError(domain: "", code: 401, userInfo: [NSLocalizedDescriptionKey: "No user is logged in."]))
            return
        }
        
        let db = Firestore.firestore()
        let userUID = user.uid
        let storageRef = Storage.storage().reference(withPath: "profile_images/\(userUID).jpg")
        
        // 1. Firestore 데이터 삭제
        db.collection("users").document(userUID).delete { error in
            if let error = error {
                completion(false, error)
                return
            }
            
            print("Firestore 데이터 삭제 성공")
            
            // 2. Firebase Storage에서 프로필 이미지 삭제
            storageRef.delete { error in
                if let error = error {
                    print("Firebase Storage 이미지 삭제 실패: \(error.localizedDescription)")
                    completion(false, error)
                    return
                }
                
                print("Firebase Storage 이미지 삭제 성공")
                
                // 3. Firebase Authentication 사용자 삭제
                user.delete { error in
                    if let error = error {
                        print("Firebase Auth 사용자 삭제 실패: \(error.localizedDescription)")
                        completion(false, error)
                        return
                    }
                    
                    print("Firebase Auth 사용자 삭제 성공")
                    completion(true, nil) // 성공
                }
            }
        }
    }

 

Firebase Storage에서 프로필 이미지 삭제

  • Firestore 데이터 삭제 후, Firebase Storage에서 프로필 이미지를 삭제하는 로직을 추가했습니다.
  • storageRef.delete {}를 사용하여 지정된 경로의 이미지를 삭제합니다.
storageRef.delete { error in
    if let error = error {
        print("Firebase Storage 이미지 삭제 실패: \(error.localizedDescription)")
        completion(false, error)
        return
    }
    print("Firebase Storage 이미지 삭제 성공")
}

 

 

로직 순서 유지

  • Firestore 데이터 삭제Storage 이미지 삭제Firebase Authentication 사용자 삭제의 순서로 작업이 진행됩니다.
  • Firestore와 Storage 작업이 모두 성공해야 Firebase Auth에서 사용자를 삭제합니다.

 

에러 처리

  • 각 단계에서 에러가 발생하면 completion(false, error)를 호출하여 실패를 반환합니다.
  • 에러 발생 시 어디서 실패했는지 로그로 출력됩니다.

 

예상 시나리오 및 처리 방식

  1. Firestore 데이터가 삭제 실패:
    • 메서드가 completion(false, error)로 종료되고, 다음 작업(Storage, Authentication)은 실행되지 않음.
  2. Storage 이미지가 삭제 실패:
    • 메서드가 completion(false, error)로 종료되고, 사용자 계정 삭제는 실행되지 않음.
  3. 모든 작업 성공:
    • Firestore 데이터 삭제 → Storage 이미지 삭제 → Firebase Auth 사용자 삭제가 모두 성공하면, completion(true, nil)을 호출하여 성공으로 처리.