从firebase auth控制台删除所有用户

时间:2016-08-06 21:06:37

标签: firebase firebase-authentication firebase-console

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

25 个答案:

答案 0 :(得分:65)

在更新的答案中,您现在可以使用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)

只需在开发者工具中运行

即可

答案 1 :(得分:31)

因为我在点击UI中的按钮和元素时非常懒,所以我设置了一个小客户端脚本:

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

您可能需要多次运行它,但这比浪费时间点击屏幕上的内容要好得多。

答案 2 :(得分:14)

firebaser here

更新2016-11-08 以下原始答案

我们刚刚发布了支持管理用例的Firebase Admin SDK,例如deleting a user account without requiring that user to sign in first

原始回答

Firebase身份验证中目前没有API可以删除用户而无需该用户登录。我们知道这限制了我们API的可用性,并且正在努力在将来的版本中添加此类功能。但是像往常一样,我们没有提供有关功能何时可用的具体时间表。

目前你唯一的工作是:

  • 以应用中的每个测试用户身份登录并从中删除用户
  • 从Firebase控制台依次删除每个用户

答案 3 :(得分:9)

这是我的自行车:

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

旨在避免经常调用delete端点,因为Google失败并显示404错误。

答案 4 :(得分:6)

稍微增加了帮助程序脚本。

德国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个或更多用户。

答案 5 :(得分:4)

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答案的更新,其中考虑到如果您有多个条目页面,则需要刷新页面。

答案 6 :(得分:3)

好吧,我使用此脚本在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 :(得分:3)

对于新的Firebase更新(13.11.2020)

请尝试使用此代码获取最新的Firebase更新。 打开控制台,粘贴此代码,然后按Enter键!

setInterval(() => {
    document.getElementsByClassName('edit-account-button mat-focus-indicator mat-menu-trigger mat-icon-button mat-button-base')[0].click()
    document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted')[2].click()
    document.getElementsByClassName('confirm-button mat-focus-indicator mat-raised-button mat-button-base mat-warn')[0].click()
}, 1000)

答案 8 :(得分:1)

在2020年11月16日成功使用了此代码:

setInterval(function () {
    $('[aria-label="View more options"]')[0].click()
    document.querySelectorAll('.mat-menu-item')[2].click()
    document.querySelector('.confirm-button').click()
}, 1000);

答案 9 :(得分:1)

法语版本

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身份验证/用户页面
  • 按控制键+ shif + J
  • 在控制台标签中,粘贴此代码,然后按Enter。

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

答案 10 :(得分:1)

只需在控制台执行以下脚本,它就会立即删除所有用户。

$('.edit-account-button').click();

$('.mat-menu-content button:last-child').click()

$('.fire-dialog-actions .confirm-button').click()

答案 11 :(得分:0)

如果你有匿名账户

setInterval(() => {
    document.getElementsByClassName('edit-account-button mat-focus-indicator mat-menu-trigger mat-icon-button mat-button-base')[0].click()
    document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted')[document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted').length === 3 ? 2 : 1].click()
    document.getElementsByClassName('confirm-button mat-focus-indicator mat-raised-button mat-button-base mat-warn')[0].click()
}, 1000)

答案 12 :(得分:0)

感谢 @abbas-ali 分享此脚本,它与最新的 firebase 版本完美配合(2021 年 7 月测试,有 600 多条记录 - 包括匿名和多联邦登录电子邮件地址)

setInterval(() => {
    document.getElementsByClassName('edit-account-button mat-focus-indicator mat-menu-trigger mat-icon-button mat-button-base')[0].click()
    if(document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted').length===3){
      document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted')[2].click()
    }else{
      document.getElementsByClassName('mat-focus-indicator mat-menu-item ng-star-inserted')[1].click()
    }   
    document.getElementsByClassName('confirm-button mat-focus-indicator mat-raised-button mat-button-base mat-warn')[0].click()
}, 1000)

答案 13 :(得分:0)

刚在这里工作(2021 年)

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

每 150 次重装一次,你只需要放入 250

答案 14 :(得分:0)

更新了 2021 年的工作答案

const interval = setInterval(() => {
  if ($('.edit-account-button').length === 0) {
    clearInterval(interval)
  } else {
    $('.edit-account-button').first().click()
    $('button:contains("Delete account")').click()
    $('.confirm-button').click()
  }
}, 1000)

https://gist.github.com/cupcakearmy/8c314b891e6958f26374c0205bac85e9

答案 15 :(得分:0)

在我的项目中,我将 firebaseAdmin 连接到模拟器进行测试。为了在每次测试之前清除数据库,我将 listUsers 函数与 deleteUser 函数结合使用。 注意您可能不想为真实数据库创建此类功能。

我的代码看起来像这样。

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),
      ),
    );
}

但是你也可以使用 async await 并用

完成同样的事情
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),
  );
}

此外,如果您碰巧使用模拟器进行测试,它的 UI 附带一个全部删除按钮。见(这里)[https://imgur.com/3Xil86I]

答案 16 :(得分:0)

简单删除所有用户 - ESM

// delete.ts or delete.mjs

import admin from 'firebase-admin';
import cred from './credentials.json';
let firebaseApp = admin.initializeApp({
    credential: admin.credential.cert(cred as admin.ServiceAccount)
});
const listAllUsers = (nextPageToken?: string) => {
    // List batch of users, 1000 at a time.
    admin
        .auth()
        .listUsers(1000, nextPageToken)
        .then(async (listUsersResult) => {
            await admin.auth().deleteUsers(listUsersResult.users.map((u) => u.uid));
            if (listUsersResult.pageToken) {
                // List next batch of users.
                listAllUsers(listUsersResult.pageToken);
            }
        })
        .catch((error) => {
            console.log('Error listing users:', error);
        });
};
listAllUsers();

答案 17 :(得分:0)

这是另一个可用作书签的脚本。简单

  1. 创建新书签 (Ctrl-D)
  2. 选择“更多”'
  3. 将脚本粘贴到 URL 输入中

然后您只需单击书签即可删除所有用户。当没有更多用户或您离开时,脚本将停止。如果您使用的不是英文版本,请使用相应的文本更新 *Text 变量。

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();
})();

答案 18 :(得分:0)

我尝试了之前的所有方法,都没有奏效,所以我根据自己的需要创建了一个:

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

答案 19 :(得分:0)

对我有用的解决方案是创建一个单独的文件并导入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方法一次循环抛出并删除一个用户。

在终端中,我只是使用node来调用文件中的函数(因此,假设文件名是delete_users.js,我只是调用了node delete_users.js,然后调用了listUsers函数。

希望这会有所帮助。

答案 20 :(得分:0)

我只是将Node.js脚本放在一起以删除Firebase身份验证中的所有用户。我已经通过删除〜10000进行了测试。我只是运行了以下Node.js。

设置Firebase Admin SDK

创建一个新文件夹。在终端中运行以下命令

{
'countryCode' : ['IE','NL'], 
'vatNumber':[6390845P,6390845P], 
'requestDate': [datetime.date(2019, 5, 29),datetime.date(2019, 5, 29)], 
'valid':[True, False], 
'name': ['BLACKNIGHT INTERNET SOLUTIONS LTD', '---'], 
'address': ['UNIT 12A, BARROWSIDE BUSINESS PARK, SLEATY ROAD, GRAIGUECULLEN CARLOW', '---']
}

现在在此文件夹中创建一个npm init sudo npm install firebase-admin --save 文件。

要遵循的步骤:

  • 转到Firebase项目->项目设置->服务帐户。
  • 单击index.js以下载JSON文件。将路径复制到JSON文件,并在下面的代码中将其替换为服务帐户私钥json文件的路径。
  • 另外,从设置页面复制Generate new Private Key。将其替换为代码。
  • 将代码复制并粘贴到databaseURL中。
  • 在终端index.js中运行。观看混乱!
node index.js

答案 21 :(得分:0)

我用过

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

答案 22 :(得分:0)

俄文版

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 23 :(得分: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);
});

我建议在页面上使用浏览器执行一次html解析逻辑的干运行,只需运行此命令并确认结果中只显示用户ID。在我的情况下,这返回了所有UID

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

答案 24 :(得分:-2)

尝试一下,

 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();