Firebaseコンソールからすべての登録ユーザーを簡単に削除する方法はありますか?たとえば、開発環境から100人のユーザーを作成しましたが、すべてのユーザーを削除したいと考えています。
firebaser here
Firebase Admin SDK をリリースしました。これは 最初にサインインする必要なくユーザーアカウントを削除する などの管理ユースケースをサポートします。
元の回答
現在、Firebase Authenticationには、ユーザーにサインインを要求せずにユーザーを削除するAPIはありません。これにより、APIの使いやすさが制限され、将来のリリースでそのような機能を追加する作業を行っています。ただし、いつものように、機能がいつ利用可能になるかについての具体的なスケジュールは提供していません。
現時点での唯一の回避策は次のとおりです。
更新された回答のように、おそらくfirebase管理ツールを使用できますが、必要ない場合は、Web内のユーザーを削除するためのもう少し堅実なjavascriptがあります。
var intervalId;
var clearFunction = function() {
if ($('[aria-label="Delete account"]').size() == 0) {
console.log("interval cleared")
clearInterval(intervalId)
return
}
$('[aria-label="Delete account"]')[0].click();
setTimeout(function () {
$(".md-raised:contains(Delete)").click()
}, 1000);
};
intervalId = setInterval(clearFunction, 3000)
開発者ツールで実行するだけです
UIのボタンや要素をクリックするのはかなり面倒なので、小さなクライアントスクリプトを設定します。
$('[aria-label="Delete account"]').click()
setTimeout(function () {
$(".md-raised:contains(Delete)").click()
}, 1000);
複数回実行する必要があるかもしれませんが、画面上のものを手動でクリックする時間を無駄にするよりもはるかに優れています。
ここに私の自転車があります:????
setInterval(() => {
$('[aria-label="Delete account"]').first().click()
setTimeout(()=>{
$(".md-raised:contains(Delete)").click()
}, 100)
}, 2000);
googleは404
エラーで失敗するため、delete
エンドポイントを頻繁に呼び出さないように設計されています。
ヘルパースクリプトを少し増やしました。
ドイツのファイアベースサイトバージョン:
$('[aria-label="Nutzermenü öffnen"]').click();
$('[aria-label="Konto löschen"]').click();
for (i = 0; i < 20; i++) {
setTimeout(() => {
$('.md-raised:contains(Löschen)').click();
}, i * 200);
}
英語版の場合は、テキストを置き換えてください。これにより、一度実行した20人以上のユーザーを削除できます。
さて、このスクリプトを使用して、Firebaseコンソールですべてのユーザーを一度に削除しました。
$('[aria-label="Delete account"]').each(function() {
$(this).click();
$('[ng-click="controller.submit()"]').click()
})
https://console.firebase.google.com/project/YOUR_PROJECT_NAME/authentication/users
Node.jsスクリプトを作成して、Firebase認証のすべてのユーザーを削除します。 〜10000を削除してテスト済みです。次のNode.jsを実行しました。
新しいフォルダーを作成します。ターミナルで次を実行します
npm init
Sudo npm install firebase-admin --save
このフォルダーにindex.js
ファイルを作成します。
Generate new Private Key
をクリックして、JSONファイルをダウンロードします。 JSONファイルへのパスをコピーし、サービスアカウントの秘密キーjsonファイルへのパスの以下のコードで置き換えます。databaseURL
をコピーします。コード内で置き換えます。index.js
にコードをコピーして貼り付けます。node index.js
で実行します。騒乱を見てください!var admin = require('firebase-admin');
var serviceAccount = require("/path/to/service/accounts/private/key/json/file");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "/url/to/your/database"
});
function deleteUser(uid) {
admin.auth().deleteUser(uid)
.then(function() {
console.log('Successfully deleted user', uid);
})
.catch(function(error) {
console.log('Error deleting user:', error);
});
}
function getAllUsers(nextPageToken) {
admin.auth().listUsers(100, nextPageToken)
.then(function(listUsersResult) {
listUsersResult.users.forEach(function(userRecord) {
uid = userRecord.toJSON().uid;
deleteUser(uid);
});
if (listUsersResult.pageToken) {
getAllUsers(listUsersResult.pageToken);
}
})
.catch(function(error) {
console.log('Error listing users:', error);
});
}
getAllUsers();
使った
var openMenuItemForFirstUser = function () {
const menuItem = $('[ng-click="controller.deleteUser()"]')
if (menuItem.size()) {
menuItem[0].classList.add("deletingThisUser")
menuItem[0].click();
setTimeout(deleteUser, 10, 0)
} else {
console.log("No users found...")
}
};
var deleteUser = function (t) {
const confirmButton = $('[ng-click="controller.submit()"]')
if (confirmButton.size()) {
console.log("deleting user")
confirmButton[0].click()
setTimeout(waitForDeletion, 10, 0)
} else {
if (t > 500) console.log("fail trying delete user")
else setTimeout(deleteUser, 10, parseInt(t) + 1)
}
}
var waitForDeletion = function (t) {
const deletingThisUser = $('.deletingThisUser')
if (deletingThisUser.size()) {
if (t > 500) console.log("fail wait for deletion")
else setTimeout(waitForDeletion, 10, parseInt(t) + 1)
} else {
setTimeout(openMenuItemForFirstUser, 10)
}
}
setTimeout(openMenuItemForFirstUser, 1000)
console.log("Deleting all users... Press F5 to cancel it")
ロシア語版
var intervalId;
var clearFunction = function() {
if ($('[aria-label="Удаление аккаунта"]').size() == 0) {
console.log("interval cleared")
clearInterval(intervalId)
return
}
$('[aria-label="Удаление аккаунта"]')[0].click();
setTimeout(function () {
$('[ng-click="controller.submit()"]').click()
}, 1000);
};
intervalId = setInterval(clearFunction, 3000)
これは一部の人に役立つかもしれません。 firebaseユーザーコンソールにアクセスできる場合-ページをhtmlとして保存し、次を使用してノードを持つユーザーを削除します。 firebase-adminをセットアップする必要があります
let fs = require('fs'),
admin = require('firebase-admin'),
cheerio = require('cheerio');
// initialize firebase admin here
admin.initializeApp({
credential: admin.credential.cert('path/to/serviceAccountKey.json'),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
// use cheerio to load the html file you downloaded
$ = cheerio.load(fs.readFileSync('./yourfirebaseconsole.html'));
$('.a12n-user-uid .fb-table-cell-wrapper').each(function() {
admin.auth().deleteUser($(this).text());
}).then(() => {
console.log('successfully delete user');
}).catch((error) => {
console.log('error occurred ', error);
});
これを実行し、結果にユーザーIDのみが表示されることを確認することにより、ブラウザーを使用してページ上でHTML解析ロジックのドライランを一度実行することをお勧めします。私の場合、これはすべてのUIDを返しました
$('.a12n-user-uid .fb-table-cell-wrapper').each(function() {
console.log($(this).text());
});
私のために働いた解決策は、別個のファイルを作成し、firebase-adminをインポートして、次を実行することでした:
const admin = require('./firebase_admin');
const listAllUsers = () => {
console.log('list all users');
// List batch of users, 1000 at a time.
admin.auth().listUsers(1000)
.then((listUsersResult) => {
listUsersResult.users.forEach((userRecord) => {
const user = userRecord.toJSON();
admin
.auth()
.deleteUser(user.uid)
.then(() => {
console.log('successfully deleted user');
})
.catch((err) => {
console.error('error deleting user: ', err);
});
});
if (listUsersResult.pageToken) {
// List next batch of users.
listAllUsers(listUsersResult.pageToken);
}
})
.catch((error) => {
console.log('Error listing users:', error);
});
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();
ここでの概念は、ユーザー認証テーブルからすべてのユーザーを取得し、deleteUser admin authメソッドを使用して、一度に1つずつスローと削除を行うことです。
ターミナルでは、nodeを使用してファイル内の関数を呼び出すだけです(ファイル名がdelete_users.js
、私はnode delete_users.js
およびlistUsers関数が呼び出されました。
お役に立てれば。