无法使用android firebase删除应用中的帐户

时间:2017-10-12 05:18:57

标签: android firebase authentication firebase-authentication

如何在应用中停用经过身份验证的用户?我在YouTube的一些指南中关注过,但它没有用。它说“无法删除您的帐户”。我已经包含了获取当前用户但仍未能从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);
    }
}
}

必须删除一些代码,因为它不会让我发布这个问题,因为它主要是代码

1 个答案:

答案 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
    }

}

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