Преобразование анонимного пользователя в зарегистрированный пользователь с Firebase Auth для Google

Я использую Firebase Auth с VueJS, и мне нужно преобразовать анонимного пользователя auth в зарегистрированный в Google.

Я использую этот код из примера:

  fromAnonymousToGoogle: function () {
  // Authenticate with the first user then save the currentUser to a local variable
    var previousUser = Firebase.auth().currentUser

  // Authenticate with a second method and get a credential
    var credential = Firebase.auth.GoogleAuthProvider()

    previousUser.link(credential)
    .catch(function (error) {
     // Linking will often fail if the account has already been linked. Handle these cases manually.
      alert(error)
    })

    // OAuth providers authenticate in an asynchronous manner, so youll want to perform the link account link in the callback.
    // previousUser = Firebase.auth().currentUser;
    Firebase.auth().signInWithPopup(new Firebase.auth.GoogleAuthProvider())
     .then(function (result) {
       return previousUser.link(result.credential)
     })
     .catch(function (err) {
       // Handle error
       alert(err)
     })
  },

Я получаю эту ошибку, пытаясь связать учетную запись с Google:

[Vue warn]: Ошибка в обработчике событий для "click": "TypeError: this.ta не является функцией"

У меня нет функции, называемой this.ta в моем коде. Как исправить эту ошибку?

Ответ 1

Чтобы ответить на последний вопрос, причина, по которой вы сталкиваетесь с этой ошибкой, заключается в том, что на самом деле вы не получаете учетные данные с var credential = Firebase.auth.GoogleAuthProvider() данными var credential = Firebase.auth.GoogleAuthProvider() но с идентификатором поставщика. Поэтому, когда вы пытаетесь link() с идентификатором провайдера, он просто не работает (я проверил, что работает с той же ошибкой из-за этого раздела вашего кода).

Фактически вы не хотите подписывать пользователя с учетными данными Google, так как это выведет вашего анонимного пользователя и войдите в систему с помощью Google. Вы просто хотите связать текущего пользователя с некоторыми учетными данными Google, которые вы можете использовать linkWithPopup метода linkWithPopup (я переименовал переменные, чтобы сделать немного больше смысла).

fromAnonymousToGoogle: function () {
            // Authenticate with the first user then save the currentUser to a local variable
            var anonUser = Firebase.auth().currentUser

            // Authenticate with a second method and get a credential
            var provider = new Firebase.auth.GoogleAuthProvider();

            anonUser.linkWithPopup(provider).then(function(result) {
                googleToken = result.credential;
                console.log(googleToken);
            }).catch(function(error) {
                console.error("Google sign in failed", error);
            });
    },

Протестировав это самостоятельно, это, по-видимому, способ приблизиться к их привязке, используя всплывающее окно, наиболее точно соответствующее вашему первоначально предоставленному коду.