Как обработать несколько методов входа для одного и того же пользователя в Firebase? - PullRequest
0 голосов
/ 27 января 2019

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

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

В моих примерах будет упоминаться только электронная почта /пароль и методы Google.

Примечание. Моя система аутентификации Firebase настроена на прием только 1 учетной записи на одно письмо.

Example1 (работает нормально):

  1. Пользователь впервые регистрируется в Google
  2. Отлично!Я получаю его данные и записываю их в Firestore, используя ID пользователя, созданный системой аутентификации.
  3. Пользователь пытается зарегистрироваться снова, теперь используя свой адрес электронной почты / пароль (тот же адрес электронной почты, что и в 1-м регистре в Google)
  4. Я получаю сообщение об ошибке, сообщающее, что электронная почта используется, я сообщаю пользователю, что он уже зарегистрирован в Google, и я прошу его снова войти в систему с помощью Google
  5. Затем, как только он вошел в систему.с помощью Google я позволю ему создать пароль на странице своего аккаунта.
  6. Я возьму этот пароль и свяжу его с ранее существовавшим аккаунтом (в котором он в настоящее время зарегистрирован), который был создан при его первой подписке.с Google.
  7. Отлично!Теперь у меня есть пользователь, который может войти в систему с помощью Google или его пароля.

Пример 2 (проблема):

  1. Пользователь регистрируется длявпервые используя свой адрес электронной почты / пароль.Обратите внимание, что его электронная почта от Google (gmail).
  2. Отлично!Я получаю его данные и записываю его в Firestore, используя ID пользователя, созданный системой авторизации.
  3. Пользователь пытается зарегистрироваться снова, теперь используя метод входа в Google (с тем же адресом электронной почты).
  4. Видимо, все работает хорошо, и пользователь входит в систему просто отлично.
  5. Но факт в том, что без каких-либо предупреждений аутентификация Firebase отбросила его метод электронной почты / пароля и заменила его только методом входа в Google.

Группа Google - Firebase Talk - Об этой проблеме

Из приведенной выше ссылки и некоторых других связанных с этим вопросов здесь, в StackOverflow, я понял, что такое поведение выглядит следующим образомиз-за проблем безопасности, и именно поэтому Google имеет «более высокий приоритет» по сравнению с другими поставщиками аутентификации, поскольку вы действительно можете доверять этим пользователям и их электронным письмам.

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

А также, похоже, это противоречит следующей странице справки Firebase:

Справка Firebase - разрешить нескольким учетным записям использовать один и тот же адрес электронной почтыадрес

На странице справки, указанной выше:

Вы можете настроить, могут ли пользователи создавать несколько учетных записей, которые используют один и тот же адрес электронной почты, но связаны с другим входом в систему.методы.Например, если вы не разрешаете использование нескольких учетных записей с одним и тем же адресом электронной почты, пользователь не может создать новую учетную запись, которая выполняет вход с использованием учетной записи Google с адресом электронной почты ex@gmail.com, если уже существует учетная запись, которая выполняет вход с использованиемадрес электронной почты ex@gmail.com и пароль.

Из приведенного выше отрывка я понимаю, что не могу создать учетную запись с помощью Google, если я создал ее ранееиспользуя комбинацию электронной почты и пароля.Но это не то, что происходит, как в Примере 2. Очень странно!

Теперь реальный вопрос:

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

Пример:

johndoe@gmail.com / password = идентификатор пользователя X

johndoe@gmail.com / вход в Google = идентификатор пользователя Y

johndoe@gmail.com / вход в Facebook =UserID Z

Все вышеперечисленные учетные записи будут хранить и получать доступ к данным в Firestore, используя johndoe@gmail.com в качестве «первичного ключа» (коллекция).

Но так как яна ранних этапах моего развития это кажется немного «хакерским», и я могу столкнуться с некоторыми осложнениями в будущем.

Что вы рекомендуете?Основная цель здесь - позволить моим пользователям зарегистрироваться и войти, используя любой метод , какой они захотят.Все методы должны позволять им получать доступ к своим данным в моем приложении (которое будет в Firestore).

Я отказываюсь молча удалять ранее созданный им пароль пользователя, чтобы позволить им зарегистрироваться и войти в Google.

Есть еще идеи или комментарии?

Извините за длинный вопрос, но я думаю, что он хорошо проиллюстрировал проблему.

1 Ответ

0 голосов
/ 02 февраля 2019

Один из вариантов - заставить пользователей пароля проверять свой адрес электронной почты сразу после регистрации.В примере № 2 Firebase сохранит существующий пароль учетной записи , если адрес электронной почты был подтвержден, например, отправив ссылку для подтверждения на адрес электронной почты, и пользователь щелкнул ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...