从firebase身份验证控制台删除所有用户

从firebase身份验证控制台删除所有用户,firebase,firebase-authentication,firebase-console,Firebase,Firebase Authentication,Firebase Console,有没有一种简单的方法可以从firebase控制台删除所有注册用户? 例如,我从我的开发环境中创建了100个用户,现在我想删除所有用户。firebaser here 更新2016-11-08以下原始答案 我们刚刚发布了,它支持管理用例,例如 原始答案 Firebase身份验证中目前没有API可以在不要求用户登录的情况下删除该用户。我们知道这限制了API的可用性,并正在努力在未来的版本中添加此类功能。但和往常一样,我们不提供该功能何时可用的具体时间表 目前,您唯一的解决办法是: 以应用程序中每个测

有没有一种简单的方法可以从firebase控制台删除所有注册用户? 例如,我从我的开发环境中创建了100个用户,现在我想删除所有用户。

firebaser here

更新2016-11-08以下原始答案 我们刚刚发布了,它支持管理用例,例如

原始答案

Firebase身份验证中目前没有API可以在不要求用户登录的情况下删除该用户。我们知道这限制了API的可用性,并正在努力在未来的版本中添加此类功能。但和往常一样,我们不提供该功能何时可用的具体时间表

目前,您唯一的解决办法是:

  • 以应用程序中每个测试用户的身份登录,然后从中删除该用户
  • 依次从Firebase控制台删除每个用户

因为我很懒得在UI中单击按钮和元素,所以我设置了一个小客户端脚本:

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

  • 如果语言与粘贴的代码匹配,则帐户将开始删除

对于新的F
 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),
  );
}