如何在应用中停用经过身份验证的用户?我在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);
}
}
}
必须删除一些代码,因为它不会让我发布这个问题,因为它主要是代码
答案 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
}
}
这对我有用。希望这会对你有所帮助