Лучший способ обработки пользовательских данных в Firestore и Firebase Auth, настроенных на использование нескольких учетных записей для электронной почты - PullRequest
0 голосов
/ 31 января 2019

В настоящее время я разрабатываю стартовый набор для своих приложений Firebase + Firestore + React.

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

Сначала я пытался сделать это, используя Firebase Auth с активированным ограничением «одна учетная запись на электронную почту» (это по умолчанию).

Но после МНОГО неудачных попыток добиться моегоЯ решил отказаться и переключить свою аутентификацию Firebase на «разрешить несколько учетных записей на одну электронную почту» .

Моя главная цель здесь:

Если я предлагаю своим пользователям 3 метода регистрации и регистрации (например: электронная почта / пароль + Google + Facebook), я чувствую, что должен соблюдать эти 3 метода независимо от того, в каком порядке онивозможно, был использован .

Дело в том, что с ограничением «одна учетная запись на электронную почту» это просто невозможно, потому что, если ваш пользователь впервые зарегистрируется с помощью электронной почты / пароля, Firebase удалит его пароль, если он зарегистрируется в Google.в следующий раз.И он сделает это так тихо, что ваш пользователь никогда не узнает, почему его пароль больше не работает (по крайней мере, это я понял из моего исследования и вопроса к поддержке Firebase).

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

У меня есть еще один вопрос, который углубляется в эту проблему

Но с этим вопросом здесь я хотел бы знать следующее:

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

Примечание: С точки зрения моего приложения: каждая учетная запись в Firebase Auth, использующая один и тот же адрес электронной почты, соответствует одному и тому же пользователю.

Например:

  1. myUser@gmail.com регистрация с использованием адреса электронной почты (отправьте ссылку для подтверждения своей электронной почты)

  2. Firebase Auth создает одну учетную запись для myUser @ gmail.ком / электронный-пароль.uid = x

  3. myUser@gmail.com регистрация с помощью входа в Google

  4. Auth Firebase создает другую учетную запись для myUser@gmail.com/ Google-вход.uid = y

  5. myUser@gmail.com регистрация через Facebook Войти

  6. Firebase auth создает другую учетную запись для myUser@gmail.com/ facebook-входа.uid = z

Поскольку каждая учетная запись будет иметь различный uid, я предоставлю им всем доступ к одним и тем же данным в Firestore, используя их email как uniqueID,который будет одинаковым для каждой учетной записи, в данном случае.

ВОПРОС

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

Помня об этом с точки зрения моего приложения: "пользователь - это электронная почта ", а не учетная запись в Firebase Auth.У каждого пользователя может быть 1, 2 или 3 учетных записи в Firebase Auth.

Вы видите потенциальные проблемы / конфликты с:

  • Правила безопасности Firestore?
  • Облачные функциидля Firebase?
  • Какой-нибудь случай с firebase-admin?
  • Какой-то конфликт систем обмена сообщениями?
  • Не знаю ... У меня тут мозговой штурм.

Спасибо за помощь.

1 Ответ

0 голосов
/ 31 января 2019

Я не вижу проблем с настройкой, которую вы описываете - и, кроме того, поскольку их электронная почта является единственной частью вашей общей идентификационной информации - у вас нет особого выбора.Пока вы структурируете все, основываясь на адресе электронной почты ... пропуская что-либо, связанное с UID, сгенерированным firebase, тогда все будет в порядке.

Одно предупреждение, которое я вам дам, это то, что вы должны уделять пристальное вниманиеубирая некоторые специальные символы из адресов электронной почты, когда вы пишете это в базе данных. Эти документы базы данных включают информацию о недопустимых символах в ключе базы данных Firebase:

Если вы создаете свои собственные ключи, они должны быть в кодировке UTF-8, может быть максимум 768байты, и не могут содержать., $, #, [,], / или управляющие символы ASCII 0-31 или 127. Также нельзя использовать управляющие символы ASCII в самих значениях.

Многиеиз которых допустимые части адреса электронной почты .

Это один большой предостерегающий вопрос, о котором я могу подумать, в противном случае вы должны быть готовы к работе.Отказ от ответственности, что у меня нет большого опыта работы с FCM, так что, возможно, есть еще одно соображение, которого я не заметил, если вы хотите добавить мобильного клиента в какой-то момент в будущем.

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