2017-10-12 41 views
0

如何在应用中停用经过身份验证的用户?我在YouTube的一些指南中跟随,但它没有奏效。它说“无法删除您的帐户”。我已经包含获取当前用户,但仍未能将该帐户从Firebase中移除。无法使用android firebase删除应用中的帐户

我的java类:

public class GeneralSettingActivity extends AppCompatActivity { 

// private button edit text etc here 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_general_setting); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    fullName.setVisibility(View.GONE); 
    userName.setVisibility(View.GONE); 
    oldEmail.setVisibility(View.GONE); 
    newEmail.setVisibility(View.GONE); 
    password.setVisibility(View.GONE); 
    newPassword.setVisibility(View.GONE); 
    changeFullname.setVisibility(View.GONE); 
    changeUsername.setVisibility(View.GONE); 
    changeEmail.setVisibility(View.GONE); 
    changePassword.setVisibility(View.GONE); 
    sendEmail.setVisibility(View.GONE); 
    remove.setVisibility(View.GONE); 

    progressBar = (ProgressBar) findViewById(R.id.progressBar); 

    if (progressBar != null) { 
     progressBar.setVisibility(View.GONE); 
    } 

    //get firebase auth instance 
    auth = FirebaseAuth.getInstance(); 
    //get current user 
    userID = auth.getCurrentUser().getUid(); 
    mTuteeDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Tutees").child(userID); 

    getUserInfo(); 

    //get current user 
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 




    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user == null) { 
       // user auth state is changed - user is null 
       // launch login activity 
       startActivity(new Intent(GeneralSettingActivity.this, LoginActivity.class)); 
       finish(); 
      } 
     } 
    }; 

    btnRemoveUser.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 



      progressBar.setVisibility(View.VISIBLE); 
      if (user != null) { 
       user.delete() 
         .addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) { 
            Toast.makeText(GeneralSettingActivity.this, "Your profile is deleted:(Create a account now!", Toast.LENGTH_SHORT).show(); 
            startActivity(new Intent(GeneralSettingActivity.this, RegisterActivity.class)); 
            finish(); 
            progressBar.setVisibility(View.GONE); 
           } else { 
            Toast.makeText(GeneralSettingActivity.this, "Failed to delete your account!", Toast.LENGTH_SHORT).show(); 
            progressBar.setVisibility(View.GONE); 
           } 
          } 
         }); 
      } 
     } 
    }); 

@Override 
protected void onResume() { 
    super.onResume(); 
    progressBar.setVisibility(View.GONE); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    auth.addAuthStateListener(authListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (authListener != null) { 
     auth.removeAuthStateListener(authListener); 
    } 
} 
} 

不得不删除一些代码导致它不会让我张贴此问题,因为它的大部分代码

+0

Firebase指出,用户必须最近登录才能成功删除,因此您可能需要重新进行身份验证,然后才能删除。以下是[re-auth]的代码(https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user)。 –

+0

谢谢,我忘了那件事。我的错误嘿嘿 –

回答

1

为此,您需要为用户首先创建凭证,然后再 - 用这些证书认证用户。在onSuccess()的重新验证方法中,您可以成功删除该用户。您可以按以下步骤操作:

首先获取当前用户实例

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

要求用户的电子邮件地址和密码,并创建凭据,然后删除用户这样

try { 

     AuthCredential credential = EmailAuthProvider 
       .getCredential(email, password); 
     if(user!=null) { 
      user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() { 
      @Override 
      public void onComplete(@NonNull Task<Void> task) { 
      user.delete().addOnCompleteListener(newOnCompleteListener<Void>() { 
       @Override 
       public void onComplete(@NonNull Task<Void> task) { 
         //user deleted successfully 
        } 
       }); 
      } 
      }); 
     } 
    }catch (Exception e) 
    { 
     //error 
    } 

} 

这对我有效。希望这会对你有所帮助

+0

谢谢!重写我的整个代码后,我错过了那一个。我忘了getcurrentuser/re认证 –