Firebase身份验证-使用GoogleAuthProvider重新认证用户时出现问题

时间:2018-10-10 08:38:02

标签: angular firebase firebase-authentication

根据文档,我需要重新尝试尝试删除其帐户但一段时间未登录的用户。这是doc(非常底部):

文档

  

如果您执行以下操作之一,并且用户登录时间过长   之前,操作失败并显示错误。当这个情况发生时,   通过从以下位置获取新的登录凭据来重新验证用户   用户并传递凭据以进行reauthenticateWithCredential

var user = firebase.auth().currentUser;
var credential;

// Prompt the user to re-provide their sign-in credentials

user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
  // User re-authenticated.
})

凭据?

我的问题是从用户部分获取新的登录凭据。凭据变量应该具有什么值?根据{{​​3}}的说法,它应该执行:

var credential = firebase.auth.EmailAuthProvider.credential(email, password);

我的问题:电子邮件和密码来自哪里?由于我使用的是 GoogleSignInAuth ,因此可以使用firebase.auth().currentUser.email来检索电子邮件,因此它看起来像这样:

var user = firebase.auth().currentUser;
let credential = firebase.auth.GoogleAuthProvider.credential(firebase.auth().currentUser.email);

user.reauthenticateAndRetrieveDataWithCredential(credential).then(() => {
  // User re-authenticated.
});

但是我遇到一个错误:

  

{“错误”:{“代码”:400,[{”消息”:“无法解析Google   id_token:qmnofficial@gmail.com“,” domain“:” global“,” reason“:” invalid“}]}}

请帮助。

1 个答案:

答案 0 :(得分:0)

您的问题是您正尝试使用电子邮件地址来检索Google凭据,这是不可能的。

let credential = firebase.auth.GoogleAuthProvider.credential(firebase.auth().currentUser.email);

根据文档

  

credential(idToken,accessToken)返回firebase.auth.OAuthCredential

     

为Google创建凭据。 ID令牌和访问权限中的至少一项   令牌是必需的。

var credential = firebase.auth.GoogleAuthProvider.credential(id_token);

var credential = firebase.auth.GoogleAuthProvider.credential(null,access_token);

对于您的用例,请按以下步骤操作

firebase.auth().currentUser.reauthenticateWithPopup(
    new firebase.auth.GoogleAuthProvider()).then(function(userCredential) {
        // You can now delete the user:
        return firebase.auth().currentUser.delete();  
    }).catch(function(error) {
        // Credential mismatch or some other error.  
    }
);

希望有帮助。