Firebaseで匿名認証を作成した際、自動クリーンアップを有効にすれば30日間で匿名ユーザーが削除されるようになります。
しかし、場合によってはスクリプトで匿名ユーザーをまるっと削除したい場合もあるでしょう。
そんなときに使えるスクリプトを作ってみました。
ソースコード
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件以上の場合はループを回すことも検討したのですが、たくさん実行すればいいやと思ってやめました。
僕の用途ではこれで満足しています。