从用户那里获取密码

时间:2018-02-11 03:47:39

标签: android firebase-authentication

所以我正在尝试实现更改密码功能。我可以使用updatePassword(newPassword)方法来完成它。我想在此之前做一些验证。例如,当用户想要更改密码时,他按下按钮然后:

  1. 用户输入当前密码
  2. 用户输入新密码

  3. 用户再次输入新密码。

  4. 如何验证用户输入的当前密码是否正确?似乎没有一种方法可以获取用户的当前密码以与其进行比较。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是"重新验证用户"这在Firebase的身份验证文档中进行了讨论。我们的想法是,您必须让用户将旧信息重新输入user.reauthenticate方法,firebase将验证信息并在onComplete中继续操作(如果成功),或者firebase会向您发送异常。您可以在onComplete中使用updatePassword,如下所示。您的用户界面看起来就像是一个交易,但实际上是它的reAuthenticate - > updatePassword。您还可以根据存储用户信息的方式来假设用户用户名/电子邮件。

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String newPassword = "SOME-SECURE-PASSWORD";

// Get auth credentials from the user for re-authentication. The 
//example below shows
// email and password credentials but there are multiple possible 
//providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
    .getCredential("user@example.com", "password1234");
// The email and password should be extracted from an EditText

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Log.d(TAG, "User re-authenticated.");
            user.updatePassword(newPassword)
               .addOnCompleteListener(new OnCompleteListener<Void>() {
                  @Override
                  public void onComplete(@NonNull Task<Void> task) {
                     if (task.isSuccessful()) {
                        Log.d(TAG, "User password updated.");
                     }
                  }
               });
        }
    });
相关问题