Хорошим решением было бы избежать использования традиционного подхода к аутентификации по электронной почте / паролю и использовать то, что здесь предлагается в другом ответе об OTP или одноразовом пароле.
Рассмотрим взаимодействие с пользователем: ввод электронной почтыи пароль на мобильном устройстве громоздок, раздражает и неудобен.Тогда они также должны запомнить свой пароль?Среднестатистический человек в западном мире, вероятно, использует от 10 до 15 приложений в день, и мы хотим обложить налогом их банки человеческой памяти за другой пароль, который неудобно вводится на их телефон, когда они находятся в упакованном поезде метро?
Хотя егообманчиво сложно собрать вместе, рассмотрим одноразовый пароль.С его помощью пользователь вводит номер телефона в качестве идентифицирующего токена.
Теоретически, у каждого пользователя есть свой уникальный номер телефона, который легко запомнить.Так как ваш пользователь находится на своем устройстве Android, имеет смысл пока, верно?И никаких неудобных вводов электронной почты и пароля.
После того, как они введут свой номер телефона, мы отправим им код на мобильное устройство, которое будет представлять собой 4-6-значный номер.Пользователь вводит этот код в приложение, тем самым подтверждая, что он является владельцем устройства, к которому привязан номер телефона.
Преимущество OTP по сравнению с электронной почтой / паролем заключается в том, что он требует очень мало памяти для пользователей.часть.И да, это даже лучше, чем OAuth, потому что, если пользователь никогда не входил в учетную запись Gmail или Github через свой мобильный браузер?Затем они возвращаются к аутентификации по электронной почте и паролю для мобильного устройства.
Одноразовый пароль удобен для пользователя.
Но вы говорите, что все в порядке, но безопасен ли он и важнее ли вопрос?... Как сделать так, чтобы мой код на стороне сервера совпадал с хешированным паролем пользователя, который я отправляю?
Правильно, поэтому технология One Time Password - это всегда амбициозный проект для ИМО.
Итак, нам нужно сохранить код, который пользователь должен вводить в устройство, чтобы мы могли сравнить его в какой-то момент в будущем.Когда вы генерируете код, сохраните его в Firebase, чтобы в будущем вы могли обратиться к Firebase и сказать, что пользователь с номером телефона 212-555-1212 только что отправил вам код 1234, это правильный код?
Итак, Firebase работает с OTP, если вы можете хранить код в Firebase.Однако на самом деле проблема заключается в том, чтобы написать пользователю код.Это актуальное SMS-сообщение.Чтобы справиться с этим, вы не можете использовать только Firebase, вы можете интегрировать чрезвычайно популярный Twilio.Twilio - это все, что нужно для взаимодействия с пользователями с помощью телефонных SMS-сообщений, поэтому мы можем использовать Twilio для отправки пользователю кода.
Вы также можете позаботиться об аутентификации или о системе пользователя внутри Firebase.Как только пользователь вводит OTP, мы генерируем JSON Web Token через Firebase.
Таким образом, все хранилище JSON и вся информация, которая отражает, кто пользователь, все, что можно сохранить в Firebase.
Но есть другая часть этого вопроса, на которую я не ответил:
Как мне защитить пароли моих пользователей, чтобы на стороне сервера можно было идентифицировать / аутентифицировать каждого пользователя?
Хорошо, вам нужно сравнить код на каком-нибудь сервере.Это не может быть Firebase, потому что Firebase - это просто хранилище данных, это место для хранения данных JSON, оно не дает нам возможности запускать пользовательский код.
Итак, вы пишете сервер для сравнения кодов?Мы НЕ хотим делать это сравнение на устройстве пользователя.
Так что же нам делать?Кроме того, как мы генерируем код?Для этого также не используйте устройство пользователя.
Так, где мы генерируем код?Мы знаем, как использовать хранилище данных Firebase для хранения кода, но как мы его сгенерируем?
Это хорошая работа для облачных функций Google.
Так что облачные функции Google - это фрагменты кода, которые запускают один из них.время по запросу на серверах Google.GCF тесно взаимодействует и интегрируется с хранилищами данных Firebase.
Мы можем добавить некоторую логику или обработку к данным, находящимся внутри Firebase.GCF позволит вам использовать некоторую пользовательскую логику для генерации ваших кодов и сохранения их в Firebase, а GCF также может сравнивать код после его отправки пользователем.
AWS Lambda и GCF почти идентичны по функциональности, что может бытьвариант, а также.