Firebase вход в систему с новым поставщиком (Google) удаляет предыдущего поставщика (пароль)
Я делаю логин с помощью Firebase (v3) Auth, и я попал в эту проблему:
- пользователь подписывается первоначально с электронной почтой и паролем.
- выход из системы.
- позже войдите в 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 ведет себя так, как должно, и это не было проблемой технического/кодирования. Это скорее вопрос документации.
когда пользователь регистрируется с электронной почтой и паролем, выходит из системы и входит в систему другим способом (который ранее не использовался), могут произойти две вещи:
- если письмо подтверждено, учетные данные электронной почты/пароля запоминаются при входе в систему с новым поставщиком (желаемый результат в моем вопросе).
или
- если электронная почта неподтверждена, пользователь обновляется таким образом, что учетные данные электронной почты/пароля удаляются и новый метод входа в систему будет сохранен. Сведения о пользователе, как
displayName
не обновляются автоматически.