概要
Firebase Authentication の匿名認証を使っていると際限なく匿名ユーザーが増えていってしまう。
匿名ユーザーの上限は1億個なので通常は放置しても問題無いと思われるが、もしもの時を考えて一括で削除する方法を調べてみた。
環境
- ローカル環境
- Windows 10
- Node.js (v18.14.2)
事前準備
[firebase]>[プロジェクトの設定]>[サービスアカウント]>[Firebase Admin SDK] から新しい秘密鍵を生成。
分かりやすい名前に変更して(今回はkeyFile.json
とする)my-app
フォルダに置く。
以降の作業はmy-app
フォルダ内で行うこととする。
作業
必要なものをインストール
npm install firebase-admin --save
npm install readline-sync
readline-syncは省略可。
削除の最終確認をしたいので追加している。
コードを書く
index.js
const admin = require("firebase-admin");
const { getAuth } = require('firebase-admin/auth');
const readlineSync = require('readline-sync');
const serviceAccount = require("./keyFile.json");
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
const list_anonymous = [];
listAllUsers();
function listAllUsers(nextPageToken){
getAuth()
.listUsers(1000, nextPageToken)
.then((listUsersResult) => {
listUsersResult.users.forEach((userRecord) => {
if(userRecord.providerData.length===0){
list_anonymous.push(userRecord.uid);
}
});
if (listUsersResult.pageToken) {
listAllUsers(listUsersResult.pageToken);
}else{
if(list_anonymous.length===0){
console.log('現在の匿名ユーザーは0人です。');
return;
}
console.log('匿名ユーザーの一覧');
list_anonymous.forEach(id=>{
console.log('id: '+id);
});
if(readlineSync.keyInYN('delete this users?')){
deleteUsers();
}else{
console.log('終了');
}
}
})
.catch((error) => {
console.log('Error listing users:', error);
});
};
function deleteUsers(){
getAuth()
.deleteUsers(list_anonymous)
.then(()=>{
console.log('ooo 削除完了 ooo');
})
.catch(error=>{
console.log(error);
console.log('xxx 削除失敗 xxx');
});
}
匿名ユーザーはproviderData
の長さが0となるのでそれを利用して抽出を行っている。
実行
コマンドプロンプト等でnode index.js
。
最終確認されるのでy
で実行。
参考URL