LoginSignup
12
6

More than 3 years have passed since last update.

[Firebase Extensions]Delete User Data

Last updated at Posted at 2019-09-27

この記事について

FirebaseSummit2019で発表された9つの拡張機能について試してみたという記事になります。
今回はDelete User Dataについてになります。

Delete User Dataとは?

Firebase/AuthenticationのUserDataが削除されたことをトリガーに
Firestore, Realtime Database, Cloud Storageのデータを削除する機能になります。

削除を行う際ポイントとなるのがAuthenticationのUUIDになります。
Firestoreを例にあげるとDocumentPathにUUIDがあることが前提となっており
以下のようなDocumentPathである必要があります。
users/{UUID}

ここで一度FirestoreのDocumentをどのように削除しているのかをコードでみてみます。

extractUserPaths
この中身を見るとfirestoreで削除したいDocumentは複数CollectionのDocumentを指定できるように思えます。
users/{UUID},secureusers/{UUID}のように
Cloud Firestoreを実践投入するにあたって考えたことで記載されているSameIDを使っている場合漏れなくAuthenticationのUUIDと同様のDocumentを削除することができそうです。

index.ts
const clearFirestoreData = async (firestorePaths: string, uid: string) => {
  logs.firestoreDeleting();

  const paths = extractUserPaths(firestorePaths, uid);
  const promises = paths.map(async (path) => {
    try {
      logs.firestorePathDeleting(path);
      await admin
        .firestore()
        .doc(path)
        .delete();
      logs.firestorePathDeleted(path);
    } catch (err) {
      logs.firestorePathError(path, err);
    }
  });

  await Promise.all(promises);

  logs.firestoreDeleted();
};

const extractUserPaths = (paths: string, uid: string) => {
  return paths.split(",").map((path) => replaceUID(path, uid));
};

const replaceUID = (path: string, uid: string) => {
  return path.replace(/{UID}/g, uid);
};

Delete User Dataを試してみる

Firestoreの中身

今回はuser, secureusersにUUIDを用いてDocumentを作った上でDelete User Dataを使用してみます。
Pathは以下のようになっております。
/version/1/users/{UUID}
/version/1/secureusers/{UUID}

authenticationで登録されているUserを削除すると削除したUserのUUIDで登録されている
users, secureusersのDocumentが削除されるはずです。

Delete User Dataの設定

今回はFirestoreで検証してみるので
RealtimeDatabaseとCloud StorageのPath設定は無しで行いました。
スクリーンショット 2019-09-28 1.08.41.png

Delete前の状態確認

Authentication
スクリーンショット 2019-09-28 0.34.44.png

Firestore/users
スクリーンショット 2019-09-28 0.36.54.png

Firestore/secureusers
スクリーンショット 2019-09-28 1.01.22.png

AuthenticationのUserDataを消してみた

見事users, secureusersのUUIDで紐づいているDocumentが削除されてました!

Cloud Functionsのログ
スクリーンショット 2019-09-28 1.16.30.png

さいごに

AuthenticationのUUIDがDocumentPathに含まれている場合、退会処理時に退会したUserのデータを削除することを約束してたりする場合Delete User Dataの設定に正しいPathを指定いれば削除し損なうことはないでしょうし入れておくと便利な機能だなと思いました。

また、デバッグ時に何度か新規にUserDataを作り直したい時があったりするのでそんな時にも使える機能かなと思います。

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6