【发布时间】:2020-04-29 12:09:31
【问题描述】:
要在 Firebase 身份验证中更新用户密码,您必须重新进行身份验证: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 是否等于实际的当前密码?当然,一种方法是在客户端首次登录时保存密码,但这在安全方面当然是非常糟糕的做法。
【问题讨论】:
-
你不能吗
if (currentPass.getText().equals(newPass.getText())) -
@AbhinavChauhan - 我正在尝试重新验证用户以更改他们的密码,因此 currentPass.getText() 应该等于他们当前的密码(保存在 firebase 中)并且 newPass 是他们的新密码。目前,无论用户在 currentPass 中输入什么,此方法都会重新验证用户,这是错误的。
标签: java android firebase firebase-authentication