Удалить всех пользователей из консоли 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 или более пользователей после выполнения.
Ответ 6
Ну, я использовал этот script, чтобы удалить всех пользователей сразу в консоли 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
Ответ 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.
Надеюсь это поможет.