Я пытаюсь повторно подтвердить подлинность пользователя перед тем, как редактировать электронную почту и пароль этого пользователя для нового требуемого адреса электронной почты и пароля, но повторная проверка подлинности всегда возвращается как «Ошибка проверки подлинности».
Myтекущий код:
databaseUser = FirebaseDatabase.getInstance().getReference("USERS");
final DatabaseReference mDatabase = databaseUser;
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot2) {
for(final DataSnapshot snapshot : dataSnapshot2.getChildren()) {
if (snapshot.child("Username").getValue(String.class).equals(username.getText().toString())){
editkey = snapshot.getKey().toString();
emailHolder.setText(dataSnapshot2.child(editkey).child("User_Email_Address").getValue(String.class));
passHolder.setText(dataSnapshot2.child(editkey).child("User_Password").getValue(String.class));
editUsername.setText(dataSnapshot2.child(editkey).child("Username").getValue(String.class));
editUserEmail.setText(dataSnapshot2.child(editkey).child("User_Email_Address").getValue(String.class));
editUserContactNum.setText(dataSnapshot2.child(editkey).child("User_Contact_Number").getValue(String.class));
editUserPass.setText(dataSnapshot2.child(editkey).child("User_Password").getValue(String.class));
btnConfirmEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(UserMaintenance.this);
builder.setTitle("Confirm Edit");
builder.setMessage("Finalize changes?");
builder.setCancelable(false);
builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String username = editUsername.getText().toString();
String emailID = editUserEmail.getText().toString();
String contactNum = editUserContactNum.getText().toString();
String paswd = editUserPass.getText().toString();
if (TextUtils.isEmpty(username) || TextUtils.isEmpty(emailID) || TextUtils.isEmpty(contactNum) || TextUtils.isEmpty(paswd)) {
Toast.makeText(getApplicationContext(), "Please fill in all fields.", Toast.LENGTH_LONG).show();
} else {
userEdit = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential2 = EmailAuthProvider
.getCredential(emailHolder.getText().toString(), passHolder.getText().toString());
userEdit.reauthenticate(credential2)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.e("TAG", "onComplete: authentication complete");
userEdit.updatePassword(editUserPass.getText().toString())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.e("TAG", "User password updated.");
userEdit.updateEmail(editUserEmail.getText().toString())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.e("TAG", "User email updated.");
btnConfirmEdit.setVisibility(View.GONE);
lblEdit.setVisibility(View.GONE);
btnBack2.setVisibility(View.GONE);
editToolbar.setVisibility(View.GONE);
editElements.setVisibility(View.GONE);
return;
}
}
});
}
}
});
} else {
Toast.makeText(UserMaintenance.this, "Authentication failed",
Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
builder.setPositiveButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Все электронные письма моего пользователя имеют правильный формат (example@domain.com) и пароль из 6+ символов.Я проверил, что учетные данные находятся прямо перед повторной аутентификацией, но все же не повезло.
Моя главная цель состоит в том, чтобы после повторной аутентификации новый требуемый адрес электронной почты и пароль пользователя обновлялись в Аутентификации, а затем в конце обновлялись остальные необходимые данные базы данных.