Firebase 9.0.0 - FirebaseAuthRecentLoginRequiredException和reauthenticate(AuthCredential)

时间:2016-05-24 07:07:09

标签: android firebase firebase-authentication

我使用的是Firebase 9.0.0。

如果用户想要更改用户电子邮件或密码,Firebase可能会抛出FirebaseAuthRecentLoginRequiredException。

firebaseUser.updateEmail(newEmail).addOnCompleteListener(...

在文档中,有人称之为" reauthenticate(AuthCredential)"在这种情况下。 在OnCompleteListener中,我捕获了异常但我无法创建EmailAuthCredential。 该怎么办?我从哪里参加EmailAuthCredential?

2 个答案:

答案 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);
               }