2016-09-22 2 views
3

Из-за моего вероятного неправильного использования анонимной проверки подлинности (см. How to prevent Firebase anonymous user token from expiring) У меня в приложении много анонимных пользователей, которых я действительно не хочу.Как навалом удалить анонимных пользователей Firebase

Я не вижу возможности для массового удаления этих пользователей. Должен ли я делать это вручную один за другим? Нужно ли использовать API для доступа к учетным записям пользователей и манипулировать ими для пользователей, отличных от текущего пользователя?

ответ

4

В консоли Firebase нет возможности для массового удаления пользователей.

Нет API для массового удаления пользователей.

Но есть административный API, который позволяет вам удалять учетные записи пользователей. См. https://firebase.google.com/docs/auth/admin/manage-users#delete_a_user

+0

Обломка. Я рад, что у нас есть только 100 поддельных пользователей, а не 10000! :-) –

+0

Вы знаете, работает ли административный API? –

+0

Любые обновления на этом Фрэнке? Понял бы. Спасибо – Atu

3

Мне просто захотелось добавить метод, который я использовал для сортировки навалом-удалением. В основном потому, что я чувствовал себя умным после этого, и я не настолько умен.

Я загрузил приложение для автоматизации мыши, которое позволяет записывать щелчки мыши, а затем воспроизводить его автоматически. Я просто удалил почти 1000 пользователей во время игры на фортепьяно.

Я использовал Macro Recorder, и он работал как шарм. Просто записал несколько итераций в консоли, в которой я удалял пользователей, чтобы он повторял 500 раз и ушел.

Я знаю, что это не очень технический ответ, но он спас меня часов монотонной щелчки мыши, так что, надеюсь, кто-то другой ищет способ для удаления лишнего веса тоже выиграет от этого. Я ненавидел тот факт, что не было большого количества удалений и действительно нужен выход из него. Было всего около 20 ручных удалений, чтобы понять, что есть приложения, которые могли бы делать то, что я делал.

1

Сегодня я столкнулся с той же проблемой, что и я нашел Firebase Admin SDK. Я использую Node.js, который очень прост в установке, поэтому вы можете попробовать следующий код. Это не полный ответ, который я знаю, но можно создать собственный скрипт/приложение для удаления хранимых uids. Тем не менее, нет способа получить список, поэтому вам нужно каждый раз создавать его каждый раз, когда вы создаете анонимную учетную запись.

Сначала загрузите свой «serviceAccountKey.json», который можно выполнить с помощью Firebase Console (Project Settings). В моем случае я переименовал файл загрузки в более дружественное имя и сохранил в папке документов.

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 через firebase инструмент
firebase аутентификации: пользователи экспорта --format = JSON
https://firebase.google.com/docs/cli/auth#file_format

Вы можете написать firebase функцию облака, чтобы вызвать или написать метод действий для запуска

импортировать файл JSON в свой файл,

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

обычно анонимный пользователь не имеет электронной почты, так что легко удалить запись, которая не имеет электронный идентификатор

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

Ни один из ответов на самом деле не дал никаких предложений о том, как узнать, что пользователь анонимный, поэтому я подумал, что добавлю код. В этом примере кода используется Firebase Admin SDK для Node.js:

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); 
    }); 
} 
Смежные вопросы