ユーザーがデータを管理できるように、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つのステップのプロセスです。
- ライブラリの
user_privacy.json
ファイルを編集して、アプリのRealtime Database、Cloud Firestore、およびCloudStorageスキーマを反映します。 -
clearData
とexportData
をクラウド関数としてデプロイします。 - アプリの関数のトリガーを実装します。
- ストレージルールを使用して
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つの関数のみをアプリに追加する場合は、データを入力する代わりに、他の関数のオブジェクトを削除できます。
clearData
とexportData
をクラウド関数としてデプロイする
Cloud Functionsにまだ慣れていない場合は、 CloudFunctionsスタートガイドでそれらの使用方法を読んでください。
Cloud Functionsに慣れたら、 clearData
関数とexportData
関数をプロジェクトに追加します。
- カスタマイズした
user_data.json
をfunctions
ディレクトリにコピーします。 - ユーザープライバシーライブラリの
index.js
からプロジェクトのindex.js
にコードをコピーします。-
clearData
を使用していない場合は、clearData
、clearDatabaseData
、clearFirestoreData
、およびclearStorageData
関数を省略してください。 -
exportData
を使用していない場合は、exportData
、exportDatabaseData
、exportFirestoreData
、およびexportStorageData
関数を省略してください。
-
- 関数をデプロイします。
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ルールを追加します。
- Firebaseコンソールでストレージにアクセスします。
- [ルール]タブを開きます。
- 次のルールを貼り付けて、[公開]をクリックします。
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... } }