Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

エンドユーザー データの消去とエクスポート

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ユーザーがデータを管理できるように、Firebaseチームは2つの一般的なユーザーデータプロセスを簡素化するライブラリを作成しました。

  • clearData :ユーザーがFirebase認証を介してアカウントを削除すると、特定のFirebaseサービス(現在はRealtime Database、Firestore、およびStorage)からユーザーのデータを削除します。

  • exportData :FirebaseサービスからのユーザーのデータのコピーをJSON文字列に保存し、Cloud Storageにアップロードして、ユーザーが簡単にダウンロードできるようにします。

アプリに関数を追加する方法を見つけるために読み続けるか、 FirebaseユーザープライバシーGitHubリポジトリのコードに直接ジャンプしてください。

clearDataまたはexportDataをアプリに追加します

ライブラリのclearData関数とexportData関数は、Realtime Database、Cloud Storage、CloudFirestoreのデータを操作するCloudFunctionsとして実装されています。独自のアプリに関数を追加することは、3つのステップのプロセスです。

  1. ライブラリのuser_privacy.jsonファイルを編集して、アプリのRealtime Database、Cloud Firestore、およびCloudStorageスキーマを反映します。
  2. clearDataexportDataをクラウド関数としてデプロイします。
  3. アプリの関数のトリガーを実装します。
  4. ストレージルールを使用してclearDataデータを保護します。

ライブラリのuser_privacy.jsonファイルを編集します

開始するには、 FirebaseユーザープライバシーGitHubリポジトリのクローンを作成するかダウンロードします。

それが終わったら、テキストエディタでfunctions/user_privacy.jsonを開きます。 jsonファイルには、 clearData関数とexportData関数がRealtime Database、Cloud Firestore、CloudStorageでアプリのデータを検索するために使用する一連のカスタマイズ可能なパスがあります。アプリがこれらのサービスの1つまたは2つのみを使用する場合は、未使用のサービスに関連付けられているJSONオブジェクトを削除することから始めます。

オブジェクトがなくなったら、残りのサービスのプレースホルダー値を、アプリが使用する実際のデータ構造に置き換え始めることができます。

リアルタイムデータベースパスをユーザーデータに追加する

アプリのRealtimeDatabaseインスタンスの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
    ]
  },
...

1つの関数のみをアプリに追加する場合は、データを入力する代わりに、他の関数のオブジェクトを削除できます。

ユーザーデータを含むCloudFirestoreオブジェクトを追加します

アプリのCloudFirestoreインスタンスのuser_privacy.jsonをカスタマイズするには、 "firestore"の下のプレースホルダーオブジェクトのリストを、ユーザーデータを含む実際のCloudFirestoreオブジェクトに置き換えます。

...
  "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
    ]
  },
...

1つの関数のみをアプリに追加する場合は、データを入力する代わりに、他の関数のオブジェクトを削除できます。

CloudStorageバケットとファイル名をユーザーデータとともに追加します

アプリのCloudStorageインスタンスの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"]
    ]
  },
...

1つの関数のみをアプリに追加する場合は、データを入力する代わりに、他の関数のオブジェクトを削除できます。

clearDataexportDataをクラウド関数としてデプロイする

Cloud Functionsにまだ慣れていない場合は、 CloudFunctionsスタートガイドでそれらの使用方法を読んでください。

Cloud Functionsに慣れたら、 clearData関数とexportData関数をプロジェクトに追加します。

  1. カスタマイズしたuser_data.jsonfunctionsディレクトリにコピーします。
  2. ユーザープライバシーライブラリのindex.jsからプロジェクトのindex.jsにコードをコピーします。
    • clearDataを使用していない場合は、 clearDataclearDatabaseDataclearFirestoreData 、およびclearStorageData関数を省略してください。
    • exportDataを使用していない場合は、 exportDataexportDatabaseDataexportFirestoreData 、およびexportStorageData関数を省略してください。
  3. 関数をデプロイします。

clearDataおよびexportDataのトリガーを実装します

各関数には異なるトリガーが必要です。

  • clearData :ユーザーが認証を通じてアカウントを削除したときにトリガーされます。
  • exportData :HTTPリクエストによってトリガーされます。

clearDataトリガーを実装する

clearDataイベントをトリガーするには、Authenticationのメソッドを使用する必要があります。まだ行っていない場合は、アプリに認証を追加します: AppleプラットフォームAndroid 、またはWeb

次に、プラットフォーム用のAuthenticationSDKのdeleteメソッドを呼び出す方法を追加します。

iOS +

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

アンドロイド

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>

FirebaseHostingで関数を直接呼び出す

アプリがFirebaseHostingでホストされているウェブアプリの場合、サイトのfirebase.jsonファイルのrewriteエントリからclearData関数を呼び出すことができます。

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

ストレージルールでexportDataデータを保護する

ユーザーのエクスポートされたデータを非公開にするには、エクスポートするユーザーへのアクセスを制限するCloudStorageルールを追加します。

  1. Firebaseコンソールストレージにアクセスします。
  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...
  }
}