2016-09-22 36 views

回答

4

Firebase控制台无法批量删除用户。

没有API批量删除用户。

但有一个管理API允许您删除用户帐户。请参阅https://firebase.google.com/docs/auth/admin/manage-users#delete_a_user

+0

无赖。我很高兴我们只有100个虚假用户,而不是10000! :-) –

+0

你知道管理API是否在工作吗? –

+0

这个Frank的更新? 将不胜感激。谢谢 – Atu

3

我只是想添加一个我刚才使用的(排序)批量删除方法。主要是因为我做这件事后感觉很聪明,而我并不聪明。

我下载了一个鼠标自动化应用程序,可让您记录鼠标点击,然后自动重播。弹钢琴时我刚刚删除了近1000名用户。

我用Macro Recorder,它的工作就像一个魅力。刚刚在删除用户的控制台中记录了一些迭代,将其设置为重复500次并走开。

我知道这不是一个非常技术性的答案,但它节省了我小时单调的鼠标点击,所以希望别人正在寻找批量删除的方式也会从中受益。我讨厌没有批量删除的事实,并且真的需要一种解决方法。它只花了大约20次手动删除来实现有可以做我正在做的事情的应用程序。

1

我今天遇到同样的问题,我找到了Firebase Admin SDK。我使用Node.js,它很容易安装,所以你可以尝试下面的代码。这不是我所知道的完整答案,但可以构建自己的脚本/应用程序来删除存储的uid。但是,无法检索列表,因此每次创建匿名帐户时都必须以某种方式构建列表。

首先,下载可通过Firebase控制台(项目设置)完成的'serviceAccountKey.json'。在我的情况下,我将下载文件重命名为更友好的名称并保存到文档文件夹中。

console.firebase.google.com/project/ 为yourprojectname /设置/ serviceaccounts/adminsdk

相关链接:

然后,玩弄使用Windows cmd.exe或任何其他外壳。 'npm install -g'将firebase-admin全局安装在您的机器中。

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

我有同样的问题。因为Firebase不提供任何API来删除批量用户,但这是我删除所有匿名用户的方式。

下载所有通过火力工具的用户为JSON
火力AUTH:出口用户--format = JSON
https://firebase.google.com/docs/cli/auth#file_format

你可以写一个火力点云功能触发或写操作的方法来触发

导入JSON文件到您的文件,

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

通常匿名用户没有电子邮件,所以很容易删除不具有电子邮件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); 
    }); 

不要试图第二次减少超时,如果你没有,你可能面临错误的记录。

Error deleting user: { Error: www.googleapis.com network timeout. Please try again. 
0

没有任何答案实际上给出了关于如何知道用户是匿名的任何建议,所以我想我会添加一些代码。此代码示例使用适用于Node.js的Firebase Admin SDK:

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. 
     listAllUsers(listUsersResult.pageToken); 
     } 
    }) 
    .catch(function(error) { 
     console.log('Error listing users:', error); 
    }); 
}