I'm trying to delete some user from realtime firebase. It's work, but if I put the app in background when I open again the app the user is not deleted from db. In debug mode the user is deleted, but in rest not. I'm using also email/password authentication provide from Firebase.
Here is my code (the methode is call in a onOptionsItemSelected for a menu):
public void reAuthenticateUser(String password) {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider
.getCredential(user.getEmail(), password);
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(!task.isSuccessful()){
handleExceptions(task.getException());
}
else{
dialog.dismiss();
Toast.makeText(BaseActivity.this,DBHelper.getInstance().getDatabase().toString(),Toast.LENGTH_LONG).show();
DBHelper.getInstance().deleteUser(user.getUid());
//ref.child("users").child(user.getUid()).setValue(null);
Log.d("ReAuth", "User re-authenticated.");
deleteUserAccount();
}
}
});
}
Here is my DBHelper class:
public class DBHelper {
private static DBHelper instance = null;
private FirebaseDatabase database;
private DatabaseReference ref;
private DBHelper(){
database = FirebaseDatabase.getInstance();
}
public static DBHelper getInstance() {
if(instance == null)
instance = new DBHelper();
return instance;
}
public void saveUserOnDB(String userId, String name, String email) {
ref = database.getReference().child("users");
ref.child(userId).setValue(new User(name, email));
}
public void deleteUser(String userId) {
ref = database.getReference().child("users");
ref.child(userId).setValue(null);
}
}
EDIT DB rules:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}