최종 사용자 데이터 삭제 및 내보내기

개발자 및 개발자의 사용자가 자신의 데이터를 제어할 수 있도록 Firebase팀에서 일반적인 2가지 사용자 데이터 절차를 단순화하는 라이브러리를 만들었습니다.

  • clearData: Firebase 인증을 통해 계정을 삭제하면 특정 Firebase 서비스(현재 실시간 데이터베이스, Firestore, Storage)에서 사용자 데이터를 삭제합니다.

  • exportData: Firebase 서비스의 사용자 데이터 사본을 JSON 문자열에 저장하고 Cloud Storage에 업로드하므로 사용자가 쉽게 다운로드할 수 있습니다.

이 문서를 계속 읽어 앱에 함수를 추가하는 방법을 확인하거나 Firebase 사용자 개인 정보 보호 GitHub 저장소의 코드를 바로 확인해 보세요.

앱에 clearData 또는 exportData 추가

라이브러리의 clearDataexportData 함수는 실시간 데이터베이스, Cloud Storage, Cloud Firestore에서 데이터 작업을 하는 Cloud Functions에 구현되어 있습니다. 자체 앱에 함수를 추가하는 것은 3단계로 구성된 절차입니다.

  1. 앱의 실시간 데이터베이스, Cloud Firestore, Cloud Storage 스키마를 반영하도록 라이브러리의 user_privacy.json 파일을 수정합니다.
  2. clearDataexportData를 Cloud Functions로 배포합니다.
  3. 앱에서 함수에 대한 트리거를 구현합니다.
  4. 스토리지 규칙으로 clearData 데이터를 보호합니다.

라이브러리의 user_privacy.json 파일 수정

시작하려면 Firebase 사용자 개인 정보 보호 GitHub 저장소를 클론하거나 다운로드합니다.

완료되면 텍스트 편집기에서 functions/user_privacy.json을 엽니다. json 파일에는 clearDataexportData 함수가 사용하는 맞춤설정 가능한 일련의 경로가 있으며, 실시간 데이터베이스, Cloud Firestore, Cloud Storage에서 앱의 데이터를 찾습니다. 앱에서 이러한 서비스를 한두 개만 사용한다면 사용하지 않는 서비스와 연결된 JSON 객체부터 삭제합니다.

객체가 삭제되면 남아 있는 서비스의 자리표시자 값을 앱에서 사용하는 실제 데이터 구조로 바꿔서 시작하면 됩니다.

사용자 데이터에 실시간 데이터베이스 경로 추가

앱의 실시간 데이터베이스 인스턴스에 대해 user_privacy.json을 맞춤설정하려면 "database" 아래의 자리표시자 문자열 목록을 사용자 데이터의 실제 경로로 바꿉니다.

...
  "database": {
    "clear": [
      "/users/UID_VARIABLE",    // Replace with your
      "/admins/UID_VARIABLE"    // actual RTDB paths
    ],
    "export": [
      "/users/UID_VARIABLE",    // Replace with your
      "/admins/UID_VARIABLE"    // actual RTDB paths
    ]
  },
...

앱에 함수 중 하나만 추가하려면 데이터를 입력하는 대신 다른 함수의 객체를 삭제할 수 있습니다.

사용자 데이터가 포함된 Cloud Firestore 객체 추가

앱의 Cloud Firestore 인스턴스에 대해 user_privacy.json을 맞춤설정하려면 "firestore" 아래의 자리표시자 객체 목록을 사용자 데이터가 포함된 실제 Cloud Firestore 객체로 바꿉니다.

...
  "firestore": {
    "clear": [
      {"collection": "users", "doc": "UID_VARIABLE", "field": "name"},
      {"collection": "users", "doc": "UID_VARIABLE"},    // Replace with your
      {"collection": "admins", "doc": "UID_VARIABLE"}    // actual Firestore paths
    ],
    "export": [
      {"collection": "users", "doc": "UID_VARIABLE", "field": "name"},
      {"collection": "users", "doc": "UID_VARIABLE"},    // Replace with your
      {"collection": "admins", "doc": "UID_VARIABLE"}    // actual Firestore paths
    ]
  },
...

앱에 함수 중 하나만 추가하려면 데이터를 입력하는 대신 다른 함수의 객체를 삭제할 수 있습니다.

사용자 데이터로 Cloud Storage 버킷 및 파일 이름 추가

앱의 Cloud Storage 인스턴스에 대해 user_privacy.json을 맞춤설정하려면 "storage" 아래의 자리표시자 스토리지 버킷 및 파일 이름을 실제 값으로 바꿉니다.

...
  "storage": {
    "clear": [    // Replace with your actual storage data
      ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"],
      ["clear-exportappspot.com", "UID_VARIABLE"]
    ],
    "export": [    // Replace with your actual storage data
      ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"]
    ]
  },
...

앱에 함수 중 하나만 추가하려면 데이터를 입력하는 대신 다른 함수의 객체를 삭제할 수 있습니다.

clearDataexportData를 Cloud Functions로 배포

Cloud Functions에 아직 익숙하지 않다면 Cloud Functions 시작 가이드에서 사용 방법을 읽어보세요.

Cloud Functions에 익숙해지면 프로젝트에 clearDataexportData 함수를 추가합니다.

  1. 맞춤설정된 user_data.jsonfunctions 디렉터리에 복사합니다.
  2. 사용자 개인 정보 보호 라이브러리의 index.js에서 프로젝트의 index.js로 코드를 복사합니다.
    • clearData를 사용하지 않는 경우 clearData, clearDatabaseData, clearFirestoreData, clearStorageData 함수를 생략합니다.
    • exportData를 사용하지 않는 경우 exportData, exportDatabaseData, exportFirestoreData, exportStorageData 함수를 생략합니다.
  3. 함수를 배포합니다.

clearDataexportData에 대한 트리거 구현

각 함수마다 다른 트리거가 필요합니다.

  • clearData: 사용자가 인증을 통해 계정을 삭제하면 트리거됩니다.
  • exportData: HTTP 요청에 의해 트리거됩니다.

clearData 트리거 구현

clearData 이벤트를 트리거하려면 인증의 메서드를 사용해야 합니다. 아직 앱(Apple 플랫폼, Android, )에 인증을 추가하지 않았다면 지금 추가합니다.

그런 다음 플랫폼에 맞는 인증 SDK의 delete 메서드를 호출하는 방법을 추가합니다.

iOS+

FirebaseAuth.User.delete { error in
  if let error = error {
    print("Error deleting user: \(error)")
  }
}

Android

FirebaseAuth.getCurrentUser().delete();

firebase.auth().currentUser.delete().catch(function(error) {
  if (error.code === 'auth/requires-recent-login') {
    window.alert('Please sign-in and try again.');
    firebase.auth().signOut();
  }
});

exportData 트리거 구현

exportData 트리거를 구현하려면 HTTP 요청을 통해 함수를 호출하는 버튼이나 링크를 앱에 추가합니다. HTTP 요청을 통한 함수 호출에서 HTTP를 통해 함수를 호출하는 방법을 자세히 알아보세요.

요청 세부정보는 다음과 같습니다.

  • 유형: POST
  • URL: https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • 본문: <var>CURRENT_USER'S_UID</var>

Firebase 호스팅에서 바로 함수 호출

앱이 Firebase 호스팅에서 호스팅되는 웹 앱인 경우 사이트의 firebase.json 파일에 있는 rewrite 항목을 통해 clearData 함수를 호출할 수 있습니다.

  "hosting": {
    "rewrites": [
       {"source": "/exportData", "function": "exportData"}
    ]
  }

스토리지 규칙으로 exportData 데이터 보호

사용자가 내보낸 데이터를 비공개 상태로 유지하기 위해 내보낸 사용자만 액세스할 수 있도록 제한하는 Cloud Storage 규칙을 추가합니다.

  1. Firebase Console에서 스토리지로 이동합니다.
  2. 규칙 탭을 엽니다.
  3. 다음 규칙을 붙여 넣은 후 게시를 클릭합니다.
service firebase.storage {
  match /b/{bucket}/o {
    match /exportData {
      // Only allow access to the user who requested the export
      match /{uid} {
        allow read, write: if request.auth.uid == uid
      }
      match /{uid}/{path=**} {
        allow read, write: if request.auth.uid == uid
      }
    }
    // Other application rules...
  }
}