みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Firebase Admin SDKを使って匿名ユーザーを一括で1000件削除する 🔥

Firebaseで匿名認証を作成した際、自動クリーンアップを有効にすれば30日間で匿名ユーザーが削除されるようになります。

firebase.google.com

しかし、場合によってはスクリプトで匿名ユーザーをまるっと削除したい場合もあるでしょう。
そんなときに使えるスクリプトを作ってみました。

ソースコード

require('dotenv').config();

const admin = require('firebase-admin');
const { getAuth } = require('firebase-admin/auth');
const readlineSync = require('readline-sync');

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
    clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
    privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
  })
});

getAuth().listUsers(1000).then((listUsersResult) => {
  const anonymousUsers = [];

  listUsersResult.users.forEach((userRecord) => {
    if (!userRecord.providerData.length) {
      anonymousUsers.push(userRecord.uid);
    }
  });
  if (!anonymousUsers.length) {
    console.log('匿名ユーザーが存在しません');

    return;
  }

  anonymousUsers.forEach((id) => {
    console.log(id);
  });

  if (readlineSync.keyInYN('delete this users?')) {
    deleteUsers(anonymousUsers);
  }
}).catch((err) => {
  console.error(err);
});

function deleteUsers(anonymousUsers) {
  getAuth().deleteUsers(anonymousUsers).then(() => {
    console.log('削除完了');
  }).catch((error) => {
    console.error(error);
  });
}

projectId、clientEmail、privateKeyは.envに記載しております。
とりあえず1000件まで一括で削除していて、1000件以上の場合はループを回すことも検討したのですが、たくさん実行すればいいやと思ってやめました。
僕の用途ではこれで満足しています。