如何批量删除Firebase匿名用户

Mat*_*ner 6 firebase firebase-authentication

由于我可能滥用匿名身份验证(请参阅如何防止Firebase匿名用户令牌过期)我的应用程序中有很多匿名用户,我实际上并不想要.

我看不到批量删除这些用户的任何方法.我是否必须逐个手动完成?反正有没有使用API​​来访问用户帐户并为当前用户以外的用户操作它们?

Fra*_*len 8

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

没有用于批量删除用户的API.

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

  • @Frank van Puffelen 这是否意味着我们必须跟踪我们创建的每个匿名用户的 UID? (2认同)

reg*_*low 7

此代码示例使用适用于Node.js的Firebase Admin SDK,并将删除没有提供程序数据的任何用户,这意味着该用户是匿名的:

function deleteAnonymousUsers(nextPageToken) {
 adminApp
    .auth()
    .listUsers(20, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        // updated condition from = 0 to === 0
        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);
    });
}
Run Code Online (Sandbox Code Playgroud)


mir*_*iro 6

如果您需要从 Firebase 控制台 UI 中删除匿名用户,但又不想经历逐一点击 250 个用户的麻烦,您可以在控制台中显示用户表的屏幕上使用以下代码:

rows = Array.from(document.querySelectorAll('td.auth-user-identifier-cell')).map(td => td.parentNode).filter((tr) => tr.innerText.includes('anonymous'))

var nextTick = null

function openContextMenu(tr) {
    console.log('openning menu')
    tr.querySelector('.edit-account-button').click()
    nextTick = deleteUser
}

function deleteUser() {
    console.log('deleting user')
    document.querySelector('.cdk-overlay-connected-position-bounding-box button:last-of-type').click()
    nextTick = confirmDelete
}

function confirmDelete() {
    console.log('confirming action')
    document.querySelector('.cdk-global-overlay-wrapper .confirm-button').click()
    nextTick = getUser
}

function getUser() {
    console.log('getting user')
    openContextMenu(rows.shift())
}

nextTick = getUser
step = 500
setInterval(() => {
    nextTick()
}, step)
Run Code Online (Sandbox Code Playgroud)

此代码本质上选择包含匿名用户的所有行,并模拟单击三个点、删除帐户并在出现的模式中确认操作的过程。

运行脚本之前,请确保在表页脚中选择每页 250 行。删除一个页面上的所有匿名用户后,您需要手动转到下一页并在另一个页面中重新运行脚本或代码tick来为您分页。

请记住,删除一个用户需要 1.5 秒(您可以使用step变量调整此值,但由于潜在的 UI 动画,我不建议低于 500 毫秒)。

此外,该脚本在后台运行,因此您可以在运行时执行多任务,例如观看 YouTube 视频。


Rya*_*yan 5

我只是想添加一个我刚刚用来(排序)批量删除的方法。主要是因为我做了之后觉得自己很聪明,而我没有那么聪明。

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

我用了 Macro Recorder,它的效果非常棒。刚刚在我删除用户的控制台记录了几次迭代,设置为重复500次就走开了。

我知道这不是一个非常技术性的答案,但它为我节省了几个小时的单调鼠标点击,所以希望其他寻找批量删除方法的人也能从中受益。我讨厌没有批量删除的事实,真的需要一种方法来摆脱它。只用了大约 20 次手动删除就意识到有应用程序可以做我正在做的事情。

  • 我发布了答案,它用几行代码来完成此操作,没有任何依赖 /sf/answers/4964223841/ (2认同)