首页 > 解决方案 > Firebase Auth(javascript):链接帐户时出现“TypeError:user.delete 不是函数”

问题描述

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

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

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:212which 指的是有return user.delete().then(function() {

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

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

标签: javascriptfirebasefirebase-authentication

解决方案


您正在使用该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);
        });

推荐阅读