我使用的是Firebase 9.0.0。
如果用户想要更改用户电子邮件或密码,Firebase可能会抛出FirebaseAuthRecentLoginRequiredException。
firebaseUser.updateEmail(newEmail).addOnCompleteListener(...
在文档中,有人称之为" reauthenticate(AuthCredential)"在这种情况下。 在OnCompleteListener中,我捕获了异常但我无法创建EmailAuthCredential。 该怎么办?我从哪里参加EmailAuthCredential?
答案 0 :(得分:5)
看来这涵盖了here:
某些安全敏感操作(例如删除帐户,设置主电子邮件地址和更改密码)要求用户最近登录。如果您执行其中一项操作,并且用户登录时间过长之前,操作失败并抛出FirebaseAuthRecentLoginRequiredException。发生这种情况时,通过从用户获取新的登录凭据并将凭据传递给reauthenticate来重新验证用户身份。例如:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// 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");
// 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.");
// retry changing the password here
}
});
答案 1 :(得分:2)
我对EmailProvider遇到了同样的问题。要重新认证,您需要证书,而要获得证书,则需要密码。我通过带有编辑文本的警报对话框解决了该问题,用户必须输入密码。
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
String reauthenticatePassword = mEditText.getText().toString().trim();
if (!reauthenticatePassword.isEmpty()) {
AuthCredential credential = EmailAuthProvider
.getCredential(firebaseUser.getEmail(),reauthenticatePassword);
firebaseUser.reauthenticate(credential);
}