Есть ли способ удалить анонимного пользователя из аутентификации базы данных Firebase и UID базы данных Firebase? - PullRequest
0 голосов
/ 22 марта 2019

Что происходит в настоящее время: , когда пользователь выходит из системы как анонимный пользователь, используя onBackPressed и case R.id.logoutMenuOption, его идентификаторы базы данных Firebase Auth и Firebase удаляются правильно.За исключением случаев, когда пользовательский свип закрывает приложение, вызывается метод onDestroy(), но их идентификаторы базы данных Firebase Auth и Firebase все еще остаются в базе данных.Я использую onDestroy(), когда пользователь сильно удаляет приложение.

Что мне нужно сделать: когда пользователь проводит пальцем по экрану, приложение вызывает методы onDestroy() и removeAnonymousVendorUser(), чтобы удалить аутентификацию анонимных пользователей, а также их UID пользователя изБаза данных реального времени.

Что я сделал до сих пор: Я создал метод removeAnonymousVendorUser() и поместил его в метод onDestroy().Я также покажу, как он используется в других моих методах выхода из системы, и в этих методах он работает, он просто не работает для onDestroy()

  @Override
protected void onDestroy() {
    super.onDestroy();
    //TODO: Figure out how to delete UID and user when they sign out
    removeAnonymousVendorUser();
    FirebaseAuth.getInstance().signOut();
    finish();
}

метода, который удаляет анонимного пользователяДанные аутентификации Firebase и базы данных Firebase:

  private void removeAnonymousVendorUser() {

    if (FirebaseAuth.getInstance().getCurrentUser() != null) {

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        user.delete();
    }

    DatabaseReference vendorIdReference = FirebaseDatabase.getInstance().getReference("Vendor");
    vendorIdReference.removeValue();

}

Метод выхода из системы, когда пользователь нажимает кнопку опции меню выхода из системы:

           //Logout Menu Option Button
              @Override
            public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {

             // If Logout Button is clicked within 2 Seconds log user out
            case R.id.logoutMenuOption:
            if (logoutAppPressAgain + 2000 > System.currentTimeMillis()) {
                logoutToast.cancel();

                removeAnonymousVendorUser();
                FirebaseAuth.getInstance().signOut();
                removeAnonymousVendorUser();
                Intent logoutIntent = new Intent(VendorMapsActivity.this, WelcomeActivity.class);
                startActivity(logoutIntent);
                finish();
            } else {
                logoutToast = Toast.makeText(getBaseContext(), R.string.press_button_again_to_logout, Toast.LENGTH_SHORT);
                logoutToast.show();
            }

            logoutAppPressAgain = System.currentTimeMillis();
    }

    return super.onOptionsItemSelected(item);
     }

Выход из системыметод, когда пользователь нажимает дважды:

        public void onBackPressed() {
    if (exitAppPressBack + 2000 > System.currentTimeMillis()) {
        exitAppBackToast.cancel();
        super.onBackPressed();

        removeAnonymousVendorUser();
        FirebaseAuth.getInstance().signOut();
        Intent logoutIntent = new Intent(VendorMapsActivity.this, 
        WelcomeActivity.class);
        startActivity(logoutIntent);
        finish();
        } else {
        exitAppBackToast = Toast.makeText(getBaseContext(), 
        R.string.press_back_one_more_time_to_exit, Toast.LENGTH_SHORT);
        exitAppBackToast.show();
        }

    exitAppPressBack = System.currentTimeMillis();
}

Это код, который создает пользователей при анонимном входе в систему:

     public void sellAnonymously(View view) {

    circProgressBar.setVisibility(View.VISIBLE);

    firebaseAuth.signInAnonymously().addOnSuccessListener(VendorLoginActivity.this, new OnSuccessListener<AuthResult>() {
        @Override
        public void onSuccess(AuthResult authResult) {

            Toast.makeText(VendorLoginActivity.this, "Success!  Enjoy the app!", Toast.LENGTH_LONG).show();
            String client_id = firebaseAuth.getCurrentUser().getUid();
            DatabaseReference client_db = FirebaseDatabase.getInstance().getReference().child("Vendor").child(client_id);
            client_db.setValue(true);
            circProgressBar.setVisibility(View.INVISIBLE);

            // Sends anonymous user to VendorMapsActivity
            startActivity(new Intent(VendorLoginActivity.this, VendorMapsActivity.class));

        }
    });
}

1 Ответ

1 голос
/ 22 марта 2019

Чтобы удалить пользователя, позвоните user.delete(), как показано в документации Firebase на удаление пользователя :

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.delete()

Чтобы удалить данные из базы данных для текущегопользователь, позвоните removeValue() со ссылкой на эти данные, как показано в документации Firebase на удаление данных :

ref.removeValue()

Вы можете объединить их с помощью облачных функций дляFirebase.В этом случае вы отвечаете удаляемому пользователю, удаляя его данные из базы данных.Краткое объяснение этого см. В документации Firebase по , запускающей облачные функции при удалении пользователя :

exports.deleteUserData = functions.auth.user().onDelete((user) => {
  // ...
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...