Firebase вход в систему с новым поставщиком (Google) удаляет предыдущего поставщика (пароль)

Я делаю логин с помощью Firebase (v3) Auth, и я попал в эту проблему:

  1. пользователь подписывается первоначально с электронной почтой и паролем.
  2. выход из системы.
  3. позже войдите в Google.

Я ожидал бы ошибку, жалуясь, что адрес электронной почты используется для другой учетной записи, а затем попросите пользователя ввести пароль, чтобы затем связать учетные записи, но вместо этого Firebase молча удаляет метод входа в систему электронной почты / пароля и возвращает сообщение об успехе.

код для аутентификации с Google:

var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(
    result => {
        console.log("federated (google) result", result);
    },
    error => {
        console.log("federated (google) error", error);
    }
);

код для аутентификации с электронной почтой и паролем:

// Login:
firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => {
        console.log("email/pass sign in success", ok);
    },
    error => {
        console.log("email/pass sign in error", error);
    }
)

// Register:
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => {
        console.log("Register OK", ok);
    },
    error => {
        console.log("Register error", error);
    }
)

Я вижу в руководстве эта привязка учетной записи выполняется путем первого входа пользователя с их текущим поставщиком / методом и только затем запрашивает учетные данные/получает маркеры для нового метода / поставщика проверки подлинности. В моем случае я не знаю, есть ли у них другие поставщики аутентификации до слишком поздно (Firebase перезаписывает он.)

есть ли способ определить, что электронное письмо уже принято, прежде чем Firebase перезапишет данные уже существующей учетной записи и попросит пользователя ввести свой пароль и связать учетные записи? Или, что еще лучше, связать учетные записи автоматически, учитывая, что они вошли в систему с Google и адреса электронной почты совпадают?

1 ответов


Я понял. Firebase ведет себя так, как должно, и это не было проблемой технического/кодирования. Это скорее вопрос документации.

когда пользователь регистрируется с электронной почтой и паролем, выходит из системы и входит в систему другим способом (который ранее не использовался), могут произойти две вещи:

  1. если письмо подтверждено, учетные данные электронной почты/пароля запоминаются при входе в систему с новым поставщиком (желаемый результат в моем вопросе).

или

  1. если электронная почта неподтверждена, пользователь обновляется таким образом, что учетные данные электронной почты/пароля удаляются и новый метод входа в систему будет сохранен. Сведения о пользователе, как displayName не обновляются автоматически.