webentwicklung-frage-antwort-db.com.de

Löschen Sie alle Benutzer aus der Firebase-Auth-Konsole

Gibt es eine einfache Möglichkeit, alle registrierten Benutzer aus der Firebase-Konsole zu löschen? Zum Beispiel habe ich hundert Benutzer aus meiner Entwicklungsumgebung erstellt, und jetzt möchte ich alle löschen.

27
Maximus S

Feuerball hier

Update 2016-11-08 Originalantwort unten

Wir haben gerade das Firebase Admin SDK veröffentlicht, das administrative Anwendungsfälle unterstützt, z. B. Löschen eines Benutzerkontos, ohne dass sich der Benutzer zuerst anmelden muss .

ursprüngliche Antwort

In der Firebase-Authentifizierung gibt es derzeit keine API zum Löschen eines Benutzers, ohne dass sich dieser Benutzer anmelden muss. Wir wissen, dass dies die Verwendbarkeit unserer API einschränkt, und arbeiten daran, solche Funktionen in einer zukünftigen Version hinzuzufügen. Wie üblich geben wir jedoch keine spezifischen Zeitvorgaben an, wann die Funktion verfügbar sein wird.

Im Moment besteht Ihre einzige Arbeit darin,

  • melden Sie sich als Testbenutzer in der App an und löschen Sie den Benutzer von dort
  • löschen Sie jeden Benutzer der Reihe nach aus der Firebase-Konsole
12

Wie in der aktualisierten Antwort können Sie wahrscheinlich jetzt Firebase-Admin-Tools verwenden, aber wenn Sie dies nicht möchten - hier ist ein etwas festeres Javascript, um Benutzer im Web zu entfernen:

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)

Führen Sie es einfach in Entwicklerwerkzeugen aus

60
AAverin

Da ich beim Klicken auf Schaltflächen und Elemente in der Benutzeroberfläche ziemlich faul bin, habe ich ein kleines Client-Skript eingerichtet:

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

Sie müssen es möglicherweise mehrmals ausführen, aber es ist viel besser, als die Zeit zu verschwenden, Dinge manuell auf dem Bildschirm anzuklicken. 

29
Ionică Bizău

Hier ist mein Fahrrad: ????

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

entwickelt, um zu vermeiden, dass delete Endpunkt häufig aufgerufen wird, da Google mit dem 404-Fehler ausfällt.

6
www.eugenehp.tk

Das Helfer-Skript wurde leicht erhöht. 

Deutsche Firebase Site Version:

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

Für die englische Version ersetzen Sie einfach den Text . Auf diese Weise können Sie 20 oder mehr Benutzer löschen, sobald sie ausgeführt wurden.

Nun, ich habe dieses Skript verwendet, um alle Benutzer auf einmal in der Firebase-Konsole zu löschen:

$('[aria-label="Delete account"]').each(function() {
  $(this).click();
  $('[ng-click="controller.submit()"]').click()
})

https://console.firebase.google.com/project/YOUR_PROJECT_NAME/authentication/users

2
Rafael Garcia

Ich habe gerade ein Node.js-Skript zusammengestellt, um alle Benutzer in Ihrer Firebase-Authentifizierung zu löschen. Ich habe es bereits getestet, indem ich ~ 10000 gelöscht habe. Ich habe einfach die folgenden Node.js ausgeführt.

So richten Sie das Firebase Admin-SDK ein

Einen neuen Ordner erstellen. Führen Sie im Terminal Folgendes aus

npm init
Sudo npm install firebase-admin --save

Erstellen Sie nun eine index.js - Datei in diesem Ordner.

Schritte zum folgen:

  • Gehen Sie zu Ihrem Firebase-Projekt -> Projekteinstellungen -> Dienstkonten.
  • Klicken Sie auf Generate new Private Key, Um die JSON-Datei herunterzuladen. Kopieren Sie den Pfad zur JSON-Datei, und ersetzen Sie ihn im folgenden Code im Pfad zur JSON-Datei mit dem privaten Schlüssel für Dienstkonten.
  • Kopieren Sie auch das databaseURL von der Einstellungsseite. Ersetzen Sie es im Code.
  • Kopieren Sie den Code und fügen Sie ihn in index.js Ein.
  • Führen Sie im Terminal node index.js. Beobachten Sie das Chaos!
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();
2
Sunit Gautam

Ich benutzte es

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

0
thr0w

Russische Version 

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)

0

Dies kann für einige hilfreich sein .. Wenn Sie Zugriff auf die Firebase-Benutzerkonsole haben, speichern Sie die Seite einfach als HTML und verwenden Sie Folgendes, um Benutzer mit Knoten zu löschen. Sie müssen firebase-admin einrichten 

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

Ich würde empfehlen, einen Testlauf der HTML-Parsing-Logik einmal auf der Seite mithilfe des Browsers durchzuführen, indem Sie einfach diesen Befehl ausführen und bestätigen, dass nur Benutzer-IDs im Ergebnis angezeigt werden. In meinem Fall wurden alle UIDs zurückgegeben 

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

Eine Lösung, die für mich funktionierte, bestand darin, eine separate Datei zu erstellen und meinen firebase-admin zu importieren und einfach Folgendes auszuführen:

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

Das Konzept hier ist, dass wir alle Benutzer aus unserer Benutzerauthentifizierungstabelle abrufen und sie dann nacheinander mit der Methode deleteUser admin auth zyklisch werfen und löschen möchten.

Im Terminal habe ich einfach node verwendet, um die Funktion in der Datei aufzurufen (sagen wir also, der Dateiname ist delete_users.js, Ich habe gerade angerufen node delete_users.js und die Funktion listUsers wurde aufgerufen.

Hoffe das hilft.

0
Ariel Salem