Удалить всех пользователей из консоли firebase auth

Есть ли простой способ удалить всех зарегистрированных пользователей из консоли firebase? Например, я создал сотни пользователей из моей среды разработки, и теперь я хочу удалить их все.

Ответы

Ответ 1

пожарный здесь

Обновление 2016-11-08 оригинальный ответ ниже

Мы только что выпустили Firebase Admin SDK, который поддерживает административные сценарии использования, такие как удаление учетной записи пользователя, не требуя от него входа в систему.

оригинальный ответ

В настоящее время в Firebase Authentication отсутствует API для удаления пользователя, не требуя от него входа в систему. Мы знаем, что это ограничивает удобство использования нашего API, и работаем над тем, чтобы добавить такие функции в будущем выпуске. Но, как обычно, мы не предоставляем конкретных сроков, когда функция будет доступна.

На данный момент ваши единственные обходные пути:

  • войдите как каждый тестовый пользователь в приложение и удалите пользователя оттуда
  • удалить каждого пользователя по очереди из консоли Firebase

Ответ 2

Как и в обновленном ответе, вы, вероятно, теперь можете использовать инструменты администрирования firebase, но если вы этого не хотите - вот немного более прочный 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)

Просто запустите его в инструментах разработчика

Ответ 3

Поскольку я довольно ленив при нажатии кнопок и элементов в пользовательском интерфейсе, я настроил небольшой клиент script:

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

Возможно, вам придется запускать его несколько раз, но это намного лучше, чем тратить время на клики на экране вручную.

Ответ 4

Вот мой велосипед: 😄

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

Предназначен для того, чтобы не вызывать delete конечной точки очень часто, так как Google завершается ошибкой 404.

Ответ 5

Слегка увеличьте свой помощник script.

Немецкая версия сайта firebase:

$('[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 или более пользователей после выполнения.

Ответ 7

Это может быть полезно для некоторых. Если у вас есть доступ к консоли пользователя firebase - просто сохраните страницу как html и используйте следующие, чтобы удалить пользователей с помощью node. нужно настроить 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);
});

Я бы порекомендовал сделать сухой запуск логики синтаксического анализа html один раз на странице с помощью браузера, просто выполнив это и подтвердив, что в результате отображаются только идентификаторы пользователей. В моем случае это вернуло все UID

$('.a12n-user-uid .fb-table-cell-wrapper').each(function() {
  console.log($(this).text());
});

Ответ 8

Русская версия

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)

Ответ 9

Я использовал это

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

Ответ 10

Я просто собрал скрипт 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();

Ответ 11

Решение, которое работало для меня, состояло в том, чтобы создать отдельный файл и импортировать мой 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();

Концепция заключается в том, что мы хотим извлечь всех пользователей из нашей таблицы аутентификации пользователей, затем выполнить цикл throw и удалить их по одному, используя метод admin deleteUser admin.

В терминале я просто использовал узел для вызова функции в файле (скажем, имя файла - delete_users.js, я просто вызвал node delete_users.js и была вызвана функция listUsers.

Надеюсь это поможет.