web-dev-qa-db-ja.com

firebase認証コンソールからすべてのユーザーを削除します

Firebaseコンソールからすべての登録ユーザーを簡単に削除する方法はありますか?たとえば、開発環境から100人のユーザーを作成しましたが、すべてのユーザーを削除したいと考えています。

37
Maximus S

firebaser here

2016-11-08の更新以下の元の回答

Firebase Admin SDK をリリースしました。これは 最初にサインインする必要なくユーザーアカウントを削除する などの管理ユースケースをサポートします。

元の回答

現在、Firebase Authenticationには、ユーザーにサインインを要求せずにユーザーを削除するAPIはありません。これにより、APIの使いやすさが制限され、将来のリリースでそのような機能を追加する作業を行っています。ただし、いつものように、機能がいつ利用可能になるかについての具体的なスケジュールは提供していません。

現時点での唯一の回避策は次のとおりです。

  • アプリで各テストユーザーとしてサインインし、そこからユーザーを削除します
  • firebase Consoleから各ユーザーを順番に削除します
15

更新された回答のように、おそらく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)

開発者ツールで実行するだけです

71
AAverin

UIのボタンや要素をクリックするのはかなり面倒なので、小さなクライアントスクリプトを設定します。

$('[aria-label="Delete account"]').click()
setTimeout(function () {
   $(".md-raised:contains(Delete)").click()
}, 1000);

複数回実行する必要があるかもしれませんが、画面上のものを手動でクリックする時間を無駄にするよりもはるかに優れています。

31
Ionică Bizău

ここに私の自転車があります:????

setInterval(() => {
  $('[aria-label="Delete account"]').first().click()
  setTimeout(()=>{
    $(".md-raised:contains(Delete)").click()
  }, 100)
}, 2000);

googleは404エラーで失敗するため、deleteエンドポイントを頻繁に呼び出さないように設計されています。

13
www.eugenehp.tk

ヘルパースクリプトを少し増やしました。

ドイツのファイアベースサイトバージョン:

$('[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

3
Rafael Garcia

Node.jsスクリプトを作成して、Firebase認証のすべてのユーザーを削除します。 〜10000を削除してテスト済みです。次のNode.jsを実行しました。

Firebase Admin SDKをセットアップするには

新しいフォルダーを作成します。ターミナルで次を実行します

npm init
Sudo npm install firebase-admin --save

このフォルダーにindex.jsファイルを作成します。

従うべき手順:

  • Firebaseプロジェクト->プロジェクト設定->サービスアカウントに移動します。
  • 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();
2
Sunit Gautam

使った

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")

0
thr0w

ロシア語版

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)
0

これは一部の人に役立つかもしれません。 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());
});
0
Vivek Chowdhary

私のために働いた解決策は、別個のファイルを作成し、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関数が呼び出されました。

お役に立てれば。

0
Ariel Salem