Функция удаления пользователя Firebase admin не работает - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь удалить всех пользователей в моей авторизации и базе данных с помощью функций firebase. Вот мой код для этого:

const admin = require("firebase-admin");
   
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "----"
});
export const listenToAdminCommands = functions.firestore.document('collection/{docUid}')
  .onWrite((change, context) =>
  {
    const pass: string = '--';
    // const before = change.before.exists? change.before.data() : null;
    const after = change.after.exists? change.after.data() : null;

    if(after !== null && after !== undefined) {
      const adminCommandType: string = after['type'];
      const adminCommandPass: string = after['pass'];

      if(adminCommandType === 'deleteAll' && adminCommandPass === pass) {
        adminDeleteAllUsers();
      }
    }
  });
//Admin control
function adminDeleteAllUsers() {
  deleteAllUsers(' ');
  return null;
}
function deleteAllUsers(nextPageToken: any) {
  admin.auth().listUsers(1000, nextPageToken)
    .then((listUsersResult: any) => {
      //go through each one and check last time signed in
      listUsersResult.users.forEach((userRecord: any) => {
        const user: any = userRecord.toJSON();
        const userUid = user['uid'];
        console.log('Deleting user for data delete uid = ', userUid);
        admin.auth().deleteUser(userUid)
          .then(() => {
            console.log('Successfully deleted user', userUid);
          })
          .catch((error: any) => {
            console.log('Error deleting user:', error);
          });
          db.collection('users').doc(userUid).delete();
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch((error: any) => {
      console.log('Error listing users:', error);
    });
}

Когда функция запускается, ни один пользователь не удаляется. Как будто функция никогда не работала. Я что-то упустил?

Обновление: я не уверен, что это способ сделать это, но он все еще не работает. Я пытался правильно обрабатывать обещания, но не уверен, правильно ли то, что я делаю.

export const listenToAdminCommands = functions.firestore.document('collection/{docUid}')
  .onWrite((change, context) =>
  {
    const pass: string = '---';
    // const before = change.before.exists? change.before.data() : null;
    const after = change.after.exists? change.after.data() : null;

    if(after !== null && after !== undefined) {
      const adminCommandType: string = after['type'];
      const adminCommandPass: string = after['pass'];

      if(adminCommandType === 'deleteAll' && adminCommandPass === pass) {
        return adminDeleteAllUsers();
      }
      return;
    }
    return;
  });
//Admin control
function adminDeleteAllUsers() {
  return deleteAllUsers(' ');
}
function deleteAllUsers(nextPageToken: any) {
  return admin.auth().listUsers(1000, nextPageToken)
    .then((listUsersResult: any) => {
      //go through each one and check last time signed in
      listUsersResult.users.forEach((userRecord: any) => {
        const user: any = userRecord.toJSON();
        const userUid = user['uid'];
        console.log('Deleting user for data delete uid = ', userUid);
        return admin.auth().deleteUser(userUid)
          .then(() => {
            console.log('Successfully deleted user', userUid);
            return db.collection('users').doc(userUid).delete();
          })
          .catch((error: any) => {
            console.log('Error deleting user:', error);
            return;
          });
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
      return;
    })
    .catch((error: any) => {
      console.log('Error listing users:', error);
      return;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...