この記事について
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を削除することができそうです。
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設定は無しで行いました。
Delete前の状態確認
AuthenticationのUserDataを消してみた
見事users, secureusersのUUIDで紐づいているDocumentが削除されてました!
さいごに
AuthenticationのUUIDがDocumentPathに含まれている場合、退会処理時に退会したUserのデータを削除することを約束してたりする場合Delete User Dataの設定に正しいPathを指定いれば削除し損なうことはないでしょうし入れておくと便利な機能だなと思いました。
また、デバッグ時に何度か新規にUserDataを作り直したい時があったりするのでそんな時にも使える機能かなと思います。