删除用户会导致Firebase错误:ERROR_INVALID_CREDENTIAL:“提供的身份验证凭证格式错误或已过期”

时间:2019-09-25 01:36:42

标签: android firebase-authentication

我正在尝试创建一个按钮,允许用户删除自己的帐户。但是,单击它会导致标题为"The supplied auth credential is malformed or has expired"的错误ERROR_INVALID_CREDENTIAL。根据我的研究,“刷新” ID令牌似乎有问题。如果我注销后再次登录,然后在几分钟内单击该按钮,该按钮将正常工作。但是,如果我登录时间过长,帐户删除将失败。

我不确定如何解决此问题,但是如下所示,我已经尝试过重新认证。这是单击按钮时调用的方法。

谢谢!

void deleteUser(){

        // Get Firebase user and Google account
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(this);

        if (acct != null) {
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        user.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {
                                            Intent intent = new Intent(
                                                    AccountActivity.this, LoginActivity.class);
                                            startActivity(intent);

                                            Toast.makeText(AccountActivity.this, "Account deleted",
                                                    Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                });
                    } else {
                        try {
                            throw task.getException();
                        } catch(Exception e) {
                            Log.e("TAG", e.getMessage());
                        }

                        Toast.makeText(AccountActivity.this, "Account deletion failed!",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });

        } else {
            Toast.makeText(AccountActivity.this, "No user found!",
                    Toast.LENGTH_SHORT).show();
        }
    }

0 个答案:

没有答案