How to bulk delete Firebase anonymous users

后端 未结 7 2069
小鲜肉
小鲜肉 2020-12-16 03:27

Due to my probable misuse of anonymous authentication (see How to prevent Firebase anonymous user token from expiring) I have a lot of anonymous users in my app that I don\'

相关标签:
7条回答
  • 2020-12-16 04:06

    There is no way in the Firebase Console to bulk-delete users.

    There is no API to bulk-delete users.

    But there is administrative API that allows you to delete user accounts. See https://firebase.google.com/docs/auth/admin/manage-users#delete_a_user

    0 讨论(0)
  • 2020-12-16 04:08

    This code sample uses the Firebase Admin SDK for Node.js, and will delete any user that has no providerData, which means the user is anonymous:

    function deleteAnonymousUsers(nextPageToken) {
     adminApp
        .auth()
        .listUsers(20, nextPageToken)
        .then(function(listUsersResult) {
          listUsersResult.users.forEach(function(userRecord) {
            if (userRecord.providerData.length === 0) { //this user is anonymous
             console.log(userRecord); // do your delete here
             adminApp.auth().deleteUser(userRecord.uid)
                .then(function() {
                    console.log("Successfully deleted user");
                })
                .catch(function(error) {
                    console.log("Error deleting user:", error);
                });
            }
          });
          if (listUsersResult.pageToken) {
            // List next batch of users.
            deleteAnonymousUsers(listUsersResult.pageToken);
          }
        })
        .catch(function(error) {
          console.log('Error listing users:', error);
        });
    }
    
    0 讨论(0)
  • 2020-12-16 04:11

    The Firebase Admin SDK can also delete multiple users at once.

    Here is Node.js sample.

    admin.auth().deleteUsers([uid1, uid2, uid3])
      .then(deleteUsersResult => {
        console.log('Successfully deleted ' + deleteUsersResult.successCount + ' users');
        console.log('Failed to delete ' +  deleteUsersResult.failureCount + ' users');
        deleteUsersResult.errors.forEach(err => {
          console.log(err.error.toJSON());
        });
      })
      .catch(error => {
        console.log('Error deleting users:', error);
      });
    

    Notice: there is a limitation as list all users. The maximum number of users allowed to be deleted is 1000 per batch.

    0 讨论(0)
  • 2020-12-16 04:13

    I had the same problem. because Firebase doesn't provide any API to delete bulk users but this is how I have deleted all anonymous users.

    Download all the users as json via firebase tool
    firebase auth:export users --format=json
    https://firebase.google.com/docs/cli/auth#file_format

    You can write a firebase cloud function to trigger or write a action method to trigger

    import the json file in to your file,

    const Users = require('./users.json'); // ES5 <br>
    import Users from './users.json'); // ES6 <br>
    

    normally anonymous user doesn't have email so it is easy to delete the record which doesn't have email id

    Users.users.map(user => {
        setTimeout(() => {
          admin.auth().deleteUser(user.localId).then(() =>{
            console.log("Successfully deleted user");
          })
          .catch((error) => {
            console.log("Error deleting user:", error);
          });
        }, 20000);
      });
    

    Don't try to reduce the timeout second if you did you may face error.

    Error deleting user: { Error: www.googleapis.com network timeout. Please try again.
    
    0 讨论(0)
  • 2020-12-16 04:24

    I faced the same problem today then I found Firebase Admin SDK. I am using Node.js which is very easy to install, so you can try the following code. It is not a complete answer I know but one can build its own script/application to delete stored uids. Yet, there is no way to retrieve a list, so you have to build one somehow every time you create an anonymous account.

    First, download your 'serviceAccountKey.json' which can be done through the Firebase Console (Project Settings). In my case I renamed the download file to a more friendly name and saved to documents folder.

    console.firebase.google.com/project/yourprojectname/settings/serviceaccounts/adminsdk

    Useful links:

    • Firebase Admin SDK Setup
    • Firebase Admin User Management
    • Firebase Admin Database API

    Then, play around using Windows cmd.exe or any other shell. The 'npm install -g' installs firebase-admin globally in your machine.

    $ npm install firebase-admin -g
    $ node
    > var admin = require("firebase-admin");
    > admin.initializeApp({
      credential: admin.credential.cert("./documents/yourprojectname-firebase-admin.json"),
      databaseURL: "https://yourprojectname.firebaseio.com"
    });
    > var db = admin.database();
    // Of course use an existent UID of your choice
    > admin.auth().getUser('2w8XEVe7qZaFn2ywc5MnlPdHN90s').then((user) => console.log
    (user))
    > admin.auth().deleteUser('2w8XEVe7qZaFn2ywc5MnlPdHN90s').then(function() {
        console.log("Successfully deleted user");
      }).catch(function(error) {
        console.log("Error deleting user:", error);
      });
    
    // To get access to some key/values in your Database:
    > var ref = db.ref("users/1234");
    > ref.once("value", function(snapshot) {
      console.log(snapshot.val());
    });
    
    0 讨论(0)
  • 2020-12-16 04:28

    I just wanted to add a method I just used to (sort-of) bulk-delete. Mostly because I felt clever after doing it and I am not that clever.

    I downloaded a mouse-automation application that lets you record your mouse clicks then replay it automatically. I just deleted almost 1000 users while playing the piano lol.

    I used Macro Recorder and it worked like a charm. Just recorded a few iterations in the console of me deleting users, set it to repeat 500 times and walked away.

    I know this isn't a very technical answer, but it saved me hours of monotonous mouse clicking so hopefully someone else looking for a way to bulk-delete will benefit from it as well. I hated the fact that there was no bulk-delete and really needed a way out of it. It only took about 20 manual deletes to realize there were apps that could do what I was doing.

    0 讨论(0)
提交回复
热议问题