【Next.js】StripeとFirestoreとFirebase Authenticationのユーザー同時削除

f:id:nekorokkekun:20191013185135p:plain:w1000
以前まとめたこちらの記事の続きとなります。
nekorokkekun.hatenablog.com

以前の段階で、StripeとFirestoreとFirebase Authenticationのユーザーを同時に作成することができました。

こちらの記事では、タイトルの通り、

StripeとFirestoreとFirebase Authenticationのユーザーを同時に削除

します。

図解

f:id:nekorokkekun:20191013183836p:plain

流れとしては簡単で、

  • コンソールのFirebase Authenticatonからユーザー削除
  • functionsのcleanupUserが起動
  • Stripeに紐づく顧客アカウントを削除
  • Firestoreに紐づくstripe_custmersの該当ドキュメントを削除

という感じになります。

一応、各コンソールを確認しておくと以下のとおりです。
Firebase Authentication
f:id:nekorokkekun:20191013184446p:plain
Firestore
f:id:nekorokkekun:20191013184459p:plain
Stripe
f:id:nekorokkekun:20191013184512p:plain

このように並べてみると、

uid => Firebase AuthenticationとFirestore
customer_id => FirestoreとStripe

とそれぞれつながっていることが分かりますね。

実装

以下のコードを追記しましょう。

functions/index.js

exports.cleanupUser = functions.auth.user().onDelete(async (user) => {
  const snapshot = await admin.firestore().collection('stripe_customers').doc(user.uid).get();
  const customer = snapshot.data();
  await stripe.customers.del(customer.customer_id);
  return admin.firestore().collection('stripe_customers').doc(user.uid).delete();
});

後はfunctionsディレクトリ内で以下のコマンドを実行すればOKです。

$ yarn deploy

Firebase FunctionsにcleanupUserがデプロイされたことを確認し、Firebaseのコンソール > Authentication からユーザーを削除してみましょう。

すると、cleanupUserが起動してStripeとFirestoreの紐づいたユーザーが削除されたはずです。