从firebase身份验证控制台删除所有用户
有没有一种简单的方法可以从firebase控制台删除所有注册用户? 例如,我从我的开发环境中创建了100个用户,现在我想删除所有用户。firebaser here 更新2016-11-08以下原始答案 我们刚刚发布了,它支持管理用例,例如 原始答案 Firebase身份验证中目前没有API可以在不要求用户登录的情况下删除该用户。我们知道这限制了API的可用性,并正在努力在未来的版本中添加此类功能。但和往常一样,我们不提供该功能何时可用的具体时间表 目前,您唯一的解决办法是:从firebase身份验证控制台删除所有用户,firebase,firebase-authentication,firebase-console,Firebase,Firebase Authentication,Firebase Console,有没有一种简单的方法可以从firebase控制台删除所有注册用户? 例如,我从我的开发环境中创建了100个用户,现在我想删除所有用户。firebaser here 更新2016-11-08以下原始答案 我们刚刚发布了,它支持管理用例,例如 原始答案 Firebase身份验证中目前没有API可以在不要求用户登录的情况下删除该用户。我们知道这限制了API的可用性,并正在努力在未来的版本中添加此类功能。但和往常一样,我们不提供该功能何时可用的具体时间表 目前,您唯一的解决办法是: 以应用程序中每个测
- 以应用程序中每个测试用户的身份登录,然后从中删除该用户
- 依次从Firebase控制台删除每个用户
$('[aria-label="Delete account"]').click()
setTimeout(function () {
$(".md-raised:contains(Delete)").click()
}, 1000);
您可能需要多次运行它,但这比浪费时间手动单击屏幕上的内容要好得多 稍微增加了您的助手脚本 德国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);
}
$('[aria label=“Nutzermenüöffnen”]')。单击();
$('[aria label=“Konto löschen”]')。单击();
对于(i=0;i<20;i++){
设置超时(()=>{
$('.md-raised:contains(Löschen')。单击();
},i*200);
}
英文版只需替换文本即可。
通过这种方式,您可以在执行后删除20个或更多用户。好的,我使用此脚本在Firebase控制台中一次删除所有用户:
$('[aria-label="Delete account"]').each(function() {
$(this).click();
$('[ng-click="controller.submit()"]').click()
})
这可能对某些人有所帮助。 如果您有权访问firebase用户控制台,只需将页面另存为html,并使用以下命令删除具有节点的用户。需要设置firebase管理员
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);
});
正如更新后的回答中所述,您现在可能可以使用firebase管理工具,但如果您不想,这里有一个更可靠的javascript来删除web中的用户:
var intervalId;
var clearFunction = function() {
var size = $('[aria-label="Delete account"]').size()
if (size == 0) {
console.log("interval cleared")
clearInterval(intervalId)
return
}
var index = Math.floor(Math.random() * size)
$('[aria-label="Delete account"]')[index].click();
setTimeout(function () {
$(".md-raised:contains(Delete)").click()
}, 1000);
};
intervalId = setInterval(clearFunction, 300)
只需在开发者工具俄文版中运行它
var有效期;
var clearFunction=function(){
如果($('[aria label=“Уааааааааааааааа{
控制台日志(“间隔清除”)
clearInterval(有效期间)
返回
}
$('[aria label=“Уааааааааааааа”点击();
setTimeout(函数(){
$('[ng click=“controller.submit()”])。单击()
}, 1000);
};
intervalId=setInterval(clearFunction,3000)
这是我的自行车:我用过它
var openMenuItemForFirstUser=函数(){
const menuItem=$('[ng click=“controller.deleteUser()”]))
if(menuItem.size()){
menuItem[0].classList.add(“删除此用户”)
菜单项[0]。单击();
setTimeout(删除用户,10,0)
}否则{
日志(“未找到用户…”)
}
};
var deleteUser=函数(t){
const confirButton=$('[ng click=“controller.submit()”]))
if(confirButton.size()){
console.log(“删除用户”)
确认按钮[0]。单击()
设置超时(WaitForDelete,10,0)
}否则{
if(t>500)console.log(“尝试删除用户失败”)
else setTimeout(deleteUser,10,parseInt(t)+1)
}
}
var waitForDeletion=函数(t){
const deletingThisUser=$('.deletingThisUser')
if(删除thisuser.size()){
if(t>500)console.log(“等待删除失败”)
else设置超时(waitForDeletion,10,parseInt(t)+1)
}否则{
setTimeout(openMenuItemForFirstUser,10)
}
}
setTimeout(openMenuItemForFirstUser,1000)
log(“删除所有用户…按F5取消”)
使用Firebase Admin SDK的完整工作解决方案
使用Firebase Admin SDK非常容易,并且是对Firebase数据执行此类任务的推荐方法。此解决方案与使用开发人员控制台的其他临时解决方案不同
我刚刚编写了一个Node.js脚本来删除Firebase身份验证中的所有用户。我已经通过删除约10000个用户对其进行了测试。我只是运行了下面的Node.js代码
设置Firebase管理SDK的步骤
创建一个新文件夹。在终端中运行以下命令
npm init
sudo npm install firebase-admin --save
现在在这个文件夹中创建一个index.js
文件
应采取的步骤:
- 转到Firebase项目->项目设置->服务帐户
- 单击
下载JSON文件。将路径复制到JSON文件,并将其替换为以下代码中服务帐户私钥JSON文件的路径生成新私钥
- 另外,从设置页面复制
。在代码中替换它数据库URL
- 在
中复制并粘贴代码index.js
- 在终端
节点index.js中运行。小心混乱李>
一个对我有效的解决方案是创建一个单独的文件并导入我的firebase管理员,然后简单地运行以下操作:
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();
这里的概念是,我们希望从user auth表中检索所有用户,然后使用deleteUser admin auth方法循环抛出并一次删除一个用户
在终端中,我只是使用node调用文件中的函数(比如说文件名是delete\u users.js
),我只是调用了node delete\u users.js
,然后调用了listUsers函数
希望这有帮助
setInterval(() => {
if ($('[aria-label="Delete account"]').length > 0) {
$('[aria-label="Delete account"]').first().click()
setTimeout(()=>{
$(".md-raised:contains(Delete)").click()
}, 100)
} else {
$('[aria-label="Reload"]').first().click()
}
}, 2000);
试试这个。这是对上面@www.eugenehp.tk answer的更新,它考虑到了如果您有多个条目页面,则需要刷新页面。试试这个
var elements = [];
$('.a12n-users-table').find('tr').each(function(r){
$(this).find('td.table-row-actions').each(function(tds) {
$(this).find('button').each(function(x){
if($(this).attr('aria-label')=="Delete account"){
elements.push($(this));
}
});
});
});
var index = 0;
function deleteUser(){
index++;
elements[index].click();
$('.fb-dialog-actions').find('.md-warn').click();
setTimeout(deleteUser, 5000);
}
deleteUser();
法文版
var intervalId;
var clearFunction = function() {
if ($('[aria-label="Supprimer le compte"]').size() == 0) {
console.log("interval cleared")
clearInterval(intervalId)
return
}
$('[aria-label="Supprimer le compte"]')[0].click();
setTimeout(function () {
$(".md-raised:contains(Supprimer)").click()
}, 1000);
};
intervalId = setInterval(clearFunction, 3000)
PS:如果您不是web开发人员,并且“在工具开发人员中执行”对您来说没有任何意义,那么以下是过程
- 使用Chrome打开firebase身份验证/用户页面
- 按下控制+换档+J
- 在console选项卡中,粘贴此代码并按enter键
- 如果语言与粘贴的代码匹配,则帐户将开始删除
var elements = [];
$('.a12n-users-table').find('tr').each(function(r){
$(this).find('td.table-row-actions').each(function(tds) {
$(this).find('button').each(function(x){
if($(this).attr('aria-label')=="Delete account"){
elements.push($(this));
}
});
});
});
var index = 0;
function deleteUser(){
index++;
elements[index].click();
$('.fb-dialog-actions').find('.md-warn').click();
setTimeout(deleteUser, 5000);
}
deleteUser();
var intervalId;
var clearFunction = function() {
if ($('[aria-label="Supprimer le compte"]').size() == 0) {
console.log("interval cleared")
clearInterval(intervalId)
return
}
$('[aria-label="Supprimer le compte"]')[0].click();
setTimeout(function () {
$(".md-raised:contains(Supprimer)").click()
}, 1000);
};
intervalId = setInterval(clearFunction, 3000)
setInterval(function () {
$('[aria-label="View more options"]')[0].click()
document.querySelectorAll('.mat-menu-item')[2].click()
document.querySelector('.confirm-button').click()
}, 1000);
setInterval(() => {
if ($('[aria-label="View more options"]').length > 0) {
$('[aria-label="View more options"]')[0].click()
if ($('[role="menuitem"]').length > 0) {
$('[role="menuitem"]')[1].click()
if ($('[class="confirm-button mat-focus-indicator mat-raised-button mat-button-base mat-warn"]').length > 0) {
$('[class="confirm-button mat-focus-indicator mat-raised-button mat-button-base mat-warn"]').click()
}
}
}
}, 500);
javascript: (function () {
const deleteText = 'Delete account';
const deleteConfirmationText = 'Delete';
const editSelector = '.edit-account-button';
const deleteSelector = `button:contains(${deleteText})`;
const deleteConfirmationSelector = `button span:contains(${deleteConfirmationText})`;
const waitForAnimation = 350;
const deleteUsers = () => {
const editAccountButton = $(editSelector).first();
if (!editAccountButton.size()) {
console.log('Delete complete.');
return;
}
editAccountButton.first().click();
setTimeout(() => {
$(deleteSelector).first().click();
setTimeout(() => {
$(deleteConfirmationSelector).first().click();
setTimeout(() => {
deleteUsers();
}, waitForAnimation * 1.5);
}, waitForAnimation);
}, waitForAnimation);
};
deleteUsers();
})();
$('.edit-account-button').click();
$('.mat-menu-content button:last-child').click()
$('.fire-dialog-actions .confirm-button').click()
var times = 0;
setInterval(() => {
$('.edit-account-button').first().click()
setTimeout(()=>{
$(".mat-button-wrapper:contains(Excluir)").click()
}, 200)
setTimeout(()=>{
$(".mat-menu-item:contains(Excluir)").click()
}, 200)
setTimeout(()=>{
$(".mat-button-wrapper:contains(Excluir)").click()
}, 200)
times++;
console.log(times)
if(times == 150) {
console.log("ATUALIZANDO!!!")
setTimeout(()=>{
$('[aria-label="Atualizar"]').click();
times = 0 ;
}, 200)
}
}, 1000);
import * as Bluebird from "bluebird"
function clearAllUsers() {
return Promise.resolve()
.then(() => admin.auth().listUsers())
.then((response) => response.users)
.then((users) =>
Bluebird.map(users, (user: { uid: string }) =>
admin.auth().deleteUser(user.uid),
),
);
}
import * as Bluebird from "bluebird"
async function clearAllUsers() {
const usersResponse = await admin.auth().listUsers();
const users = usersResponse.users;
return await Bluebird.map(users, (user: { uid: string }) =>
admin.auth().deleteUser(user.uid),
);
}