簡體   English   中英

有沒有辦法從 Firebase 數據庫身份驗證和 Firebase 數據庫 UID 中刪除匿名用戶?

[英]Is there a way to delete anonymous user from Firebase Database Authentication and Firebase Database UID?

當前發生的情況:當用戶使用onBackPressedcase R.id.logoutMenuOption作為匿名用戶注銷時,他們的 Firebase Auth 和 Firebase 數據庫 Uid 被正確刪除。 除了,當用戶滑動關閉應用程序時,將調用onDestroy()方法,但他們的 Firebase Auth 和 Firebase 數據庫 Uid 仍然保留在數據庫中。 當用戶滑動關閉應用程序時,我使用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 Auth 數據和 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));

        }
    });
}

要刪除用戶,請在Firebase文檔中顯示有關刪除用戶的信息,調用user.delete()

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

user.delete()

要從當前用戶的數據庫中刪除數據,請在對該數據的引用上調用removeValue() ,如有關刪除數據的Firebase文檔中所示:

ref.removeValue()

您可以將Cloud Functions for Firebase結合使用。 在這種情況下,您通過從數據庫中刪除其數據來響應被刪除的用戶。 有關此內容的簡短說明,請參閱有關刪除用戶時觸發Cloud Functions的Firebase文檔:

exports.deleteUserData = functions.auth.user().onDelete((user) => {
  // ...
})
User user = FirebaseAuth.instance.currentUser;
await user.delete();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM