【问题标题】:Firebase Auth (javascript): 'TypeError: user.delete is not a function' when linking accountsFirebase Auth(javascript):链接帐户时出现“TypeError:user.delete 不是函数”
【发布时间】:2019-05-18 23:41:48
【问题描述】:

我正在尝试将匿名 firebase 帐户与提供者帐户相关联,并且我正在使用从此处的文档中复制的以下 javascript 代码:https://firebase.google.com/docs/auth/web/account-linking

这是我正在使用的确切代码:

function mergeAccounts(credential){

    console.log("merging guest account with provider account");

    var auth = firebase.auth();

    // Get reference to the currently signed-in user
    var prevUser = auth.currentUser;
    // Sign in user with another account
    auth.signInAndRetrieveDataWithCredential(credential).then(function(user) {
      console.log("Sign In Success", user);
      var currentUser = user;
      // Merge prevUser and currentUser data stored in Firebase.
      // Note: How you handle this is specific to your application

      // After data is migrated delete the duplicate user
      return user.delete().then(function() {
        // Link the OAuth Credential to original account
        return prevUser.linkAndRetrieveDataWithCredential(credential);
      }).then(function() {
        // Sign in with the newly linked credential
        return auth.signInAndRetrieveDataWithCredential(credential);
      });
    }).catch(function(error) {
      console.log("Sign In Error", error);
    });
}

当我以匿名用户身份登录到 firebase,然后尝试使用我的 google 帐户登录时,上面的代码成功地用 google 登录了我(console.log("Sign In Success", user); 行按预期工作,并向我显示了用户详细信息控制台。但是我得到一个错误,上面写着Sign In Error TypeError: user.delete is not a function at 16login.js:212,它指的是具有return user.delete().then(function() {的行

我使用的文档和代码 sn-p 似乎表明 delete()user 的一个函数,所以我对它为什么会抛出这个错误感到有点困惑。

非常感谢任何帮助 - 谢谢。

【问题讨论】:

    标签: javascript firebase firebase-authentication


    【解决方案1】:

    您使用的是signInAndRetrieveDataWithCredential 方法,而不是signInWithCredential,因此返回值为UserCredential 对象。您需要通过回调函数的返回属性的user 属性访问user

        auth.signInAndRetrieveDataWithCredential(credential).then(function(userCredential) {
              const user = userCredential.user; // HERE
              console.log("Sign In Success", user);
              var currentUser = user;
              // Merge prevUser and currentUser data stored in Firebase.
              // Note: How you handle this is specific to your application
    
              // After data is migrated delete the duplicate user
              return user.delete().then(function() {
                // Link the OAuth Credential to original account
                return prevUser.linkAndRetrieveDataWithCredential(credential);
              }).then(function() {
                // Sign in with the newly linked credential
                return auth.signInAndRetrieveDataWithCredential(credential);
              });
            }).catch(function(error) {
              console.log("Sign In Error", error);
            });
    

    【讨论】:

    • 它说不要用这个部分说“谢谢”,但我不知道还能在哪里说,所以 - 谢谢 - 它有效!非常感谢。
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2017-10-09
    • 2018-06-06
    • 2018-04-10
    • 2018-11-27
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多