Интеграция OAuth с электронной почтой / паролем в Firebase
Я пытался настроить приложение, которое поддерживает 3 типа аутентификации: - электронная почта / пароль - Google (OAuth) - Facebook (OAuth)
В Firebase > Аутентификация> Методы входа я включил 3 опции, упомянутые выше. В Firebase > Аутентификация> Дополнительно у меня есть следующий набор: "Запретить создание нескольких учетных записей с одним и тем же адресом электронной почты"
Только к сведению, пароль, который я использую в своем приложении для создания учетной записи с [Email/ паролем], отличается от моей учетной записи Google, которая также отличается от моей учетной записи Facebook (3 отдельных пароля - сценарий очень реального мира)
- [Электронная почта / пароль]: john.doe@gmail.com, Password123
- [Google]: john.doe@gmail.com, Password456
- [Facebook]: john.doe@gmail.com, Password789
Я хочу, чтобы пользователь подписывался с любым провайдером по своему усмотрению, а затем связывал любые другие доступные параметры входа / аутентификации.
Мне удается правильно настроить [Email / Password] или OAuth-провайдеров (Google и Facebook). Но, когда я пытаюсь объединить все 3 вместе, весь ад вырвался на свободу. Некоторые отмеченные ошибки:
Сценарий А)
- Создать пользователя с электронной почтой / паролем / войти / выйти (работает нормально)
- Войдите в систему с помощью Google OAuth (связанного с тем же адресом электронной почты), как указано выше, учетные записи связаны между собой / вход / выход
- попытаться войти с электронной почтой / паролем снова -> ОШИБКА
- Похоже, Google OAuth переопределил предыдущие настройки аккаунта.
Сценарий Б)
- Создать пользователя с электронной почтой / паролем / войти / выйти (работает нормально)
- Войдите в систему с помощью OAuth Facebook (связанного с тем же адресом электронной почты), как указано выше, учетные записи связаны друг с другом, но при попытке входа в систему появляется ошибка, так как использованный пароль не соответствует моему паролю Facebook. Но этого не происходит, когда я связываю свои аккаунты Google и Facebook вместе. Почему эта проблема возникает у провайдеров [Email/password] и OAuth?
Я знаю, что в Firebase недавно произошли некоторые обновления / изменения, может быть, документация / примеры, которые я проверял, были неактуальными. Кто-нибудь успешно смог [Email/ пароль] аутентифицировать с провайдерами OAuth? Может ли кто-нибудь предоставить хороший пример в Интернете или недавнюю документацию, на которую я могу взглянуть?
Кстати, запуск кода в Angular5, если это поможет. Заранее благодарю за любую помощь.
JB
1 ответ
Сценарий A) происходит потому, что электронная почта / пароль не проверены. Учетная запись не связана, чтобы предотвратить угон. Например, я могу запросить адрес электронной почты Google другого человека и создать учетную запись электронной почты / пароль. Владелец этой учетной записи Google попытается войти в эту учетную запись. Я должен потерять доступ к нему. Чтобы решить эту проблему, попробуйте подтвердить адрес электронной почты после создания учетной записи электронной почты / пароля. Подтвержденный аккаунт не будет удален.
Сценарий Б) Это не происходит из-за паролей. Firebase не имеет доступа к вашему паролю Facebook или Google. Вы уверены, что правильно связали аккаунт? Когда вы пытаетесь войти через Facebook, используя тот же адрес электронной почты, что и существующий адрес электронной почты / пароль, вы получите сообщение об ошибке, что учетные данные уже существуют (ошибка также возвращает учетные данные Facebook), вам нужно будет сначала войти в существующий адрес электронной почты / пароль учетной записи, а затем связать учетные данные Facebook с этой учетной записью.