所以我正在尝试实现更改密码功能。我可以使用updatePassword(newPassword)方法来完成它。我想在此之前做一些验证。例如,当用户想要更改密码时,他按下按钮然后:
用户输入新密码
用户再次输入新密码。
如何验证用户输入的当前密码是否正确?似乎没有一种方法可以获取用户的当前密码以与其进行比较。
答案 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.");
}
}
});
}
});