Чтобы обновить пароль пользователя в Firebase Authentication, вы должны повторно пройти аутентификацию: https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#reauthenticate (com.google.firebase.auth.AuthCredential)
Однако эта функция, похоже, не работает дважды проверьте правильность currentPassword
перед повторной аутентификацией. Я полагаю, что это может быть связано с тем, что Firebase не требует повторной аутентификации до истечения заданного периода времени, и будет обходить это, если она все еще находится в пределах этого периода.
Вот что я имею до сих пор:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider
.getCredential(mAuth.getInstance().getCurrentUser().getEmail(), currentPass.getText().toString());
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "User re-authenticated.");
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.updatePassword(newPass1.getText().toString())
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
dialog.dismiss();
Toast.makeText(manageAccount.this, "Password updated!", Toast.LENGTH_LONG).show();
}else {
}
}
});
}
});
Похоже, что поле currentPass
может быть абсолютно любым, и приложение продолжит работу и сменит пароль. Есть ли способ, которым вы можете заставить Firebase фактически проверить, равен ли currentPass
фактическому текущему паролю? Конечно, одним из способов будет сохранение пароля при первом входе в систему на клиенте, но это, конечно, очень плохая практика с точки зрения безопасности.