Обновление пароля аутентификации Firebase с помощью user.reauthenticate - PullRequest
1 голос
/ 29 апреля 2020

Чтобы обновить пароль пользователя в 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 фактическому текущему паролю? Конечно, одним из способов будет сохранение пароля при первом входе в систему на клиенте, но это, конечно, очень плохая практика с точки зрения безопасности.

1 Ответ

1 голос
/ 29 апреля 2020

Малкольм из команды Firebase здесь! Здесь есть несколько вещей, на которые следует обратить внимание:

  • Прежде чем пытаться обновить пароль, необходимо проверить, успешно ли выполняется задача в вашем onCompleteListener. Мы определенно проверяем, правильно ли указан currentPassword, но вы можете пропустить ошибку, которую мы возвращаем в task:)
  • . Чтобы проверить ошибки reauthenticate(), вы вы можете использовать task.isSuccessful() в вашем текущем методе, или вы можете разделить ваш код на onSuccessListener и onFailureListener, если вы хотите более ясный поток semanti c.
  • Если вы видите успех, несмотря на неверный первый пароль (игнорируя тот факт, что reauthenticate не удастся), это потому, что ваш пользовательский сеанс все еще относительно новый. Мы проверяем сеансы по таймеру (сейчас это 5 минут, но это может измениться), чтобы убедиться, что пользователь недавно вошел в систему, прежде чем позволить ему обновить свой пароль или выполнить другие операции по изменению учетной записи. Если ваш первый вход в систему достаточно недавний, это не имеет значения, если вы не пройдете повторную аутентификацию, потому что currentUser все еще проходит проверку таймера на стороне сервера. любые дополнительные разъяснения, просто добавьте комментарий, и я постараюсь ответить вам.

    ~ Малкольм

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...