daily-dev.net

React, firebase, 機械学習など

firebaseでユーザーが自身のアカウントを削除できるようにする

sponsored

cloud functionsを利用するのが一番早そうだった。

deleteUserByAdmin というエンドポイントをcloud functionで作って、

それを fire.functions().httpsCallable('deleteUserByAdmin');でクライアントサイドから叩くというコードです。

クライアントサイド


  function confirmAndDeleteAccount() {
    let result = window.confirm('本当に削除しますか?');
    if (result) {
      var deleteUserByAdmin = fire.functions().httpsCallable('deleteUserByAdmin');
      deleteUserByAdmin().then(function (result) {
        console.log(result)
        window.location.href = "/";
      });

    }
  }

cloud functions


// ユーザー削除
exports.deleteUserByAdmin = functions.https.onCall((data, context) => {
    const uid = context.auth.uid;
    console.log('delete start.', uid)
    // admin によってuser削除する
    admin.auth().deleteUser(uid)
        .then(() => {
            functions.database.ref(`items/${uid}`).remove();
            functions.storage.ref(`users/${uid}`).remove();
            return 'ok'
        })
        .catch((error) => console.error('There was an error while deleting user:', error));
})

cloud functions http requestについては以下記事を参照

firebase cloud functions で爆速でAPIサーバー作ってcron-job.orgで定期実行する