web

Next.js × Firebaseでユーザーと関連するデータを削除する機能を作る

公開日:2021年12月12日
最終更新日:2021年12月12日

Firebaseでユーザー削除するのも簡単だろうと思ってたら、ユーザー削除する時に再認証させたり、ユーザーに関するデータを削除するにはCloud Functionsで再帰的に処理を書く必要があり面倒さがありましたが、拡張機能が追加されたことでめっちゃ楽になってました。

前提としてFunctionsや拡張機能を使うので、Blazeプランで行います。

手順

  1. ユーザー削除処理がされたら、uid をFirestoreに deleted_users/{uid} で登録
  2. Cloud Functionsで deleted_users に追加されたのをトリガーにユーザー削除を実行
  3. Firebaseが提供している拡張機能 「Delete User Data」を使って、関連するデータを削除


削除ユーザーをFirestoreに登録

Next.jsでユーザー削除処理を書きます。削除ボタンをクリックしたら、deleted_users にuidが追加されます。

await setDoc(doc(db, 'deleted_users', currentUser.uid), {
  uid: currentUser.uid,
  createdAt: Timestamp.fromDate(dayjs(new Date()).toDate()),
})

await auth.signOut()

Router.push(`/`)


Cloud Functionsでユーザー削除

Cloud Functionsの方で以下のコードを書きます。 deleted_users に追加されたのをトリガーに、そのuidのユーザーを削除します。
これでユーザーは削除されました。

exports.deleteUser = functions
  .region('asia-northeast1')
  .firestore.document('deleted_users/{docId}')
  .onCreate(async (snap, context) => {
    const deleteDocument = snap.data()
    const uid = deleteDocument.uid


    // Authenticationのユーザーを削除する
    await admin.auth().deleteUser(uid)
  })


拡張機能Delete User Dataで削除ユーザーのデータを削除

ユーザーは削除されましたが、そのユーザーに関するデータは残っているので拡張機能を使って削除します。
以下から拡張機能を有効化します。
Delete User Data
設定はこんな感じです。location設定ミスってしまったんですが、特に不都合ないのでこのままにしてます。 asia-northeast1 がいいと思います。

さいごに

Firebase簡単で便利なのに、削除機能めんどくさいなと思ってたら、めっちゃ簡単になってて嬉しいです。

About the author

大阪でフロントエンドエンジニアをしています。写真を撮るのが趣味です。よかったら500pxに載せてる写真も見てください。
web上に公開しているので、正確さに可能な限り努力してますが、個人の備忘録程度に書いてるので、ご自身の判断で参考程度に読んでください。
間違いやご意見があれば、コンタクトやSNSに気軽にご連絡ください。

Read next

Category

  • web
  • 雑記