Вход с аутентификацией по телефону

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

Когда посетитель регистрируется, я создаю несколько разных записей, чтобы отслеживать события. Запись device создается автоматически, когда кто-то заходит на сайт в новом браузере. Если они возвращаются, мы просматриваем файл cookie, сохраненный в их браузере, чтобы идентифицировать их. Чтобы проверить посетителя, мы используем запись телефона: чтобы отследить его номер и проверить его в «реальном» мире с помощью текстового сообщения. Для новичков создается запись user. Сначала эта запись является анонимной и просто связывает вещи между телефоном и браузером или браузерами, которым он принадлежит.

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

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

После того, как я внесу это изменение, любой процесс будет выглядеть так:

  • Подтвердите вход на основе уникального токена, отправленного в текстовом сообщении.
  • При необходимости подтвердите соответствующий телефон.
  • Отметьте устройство, связанное с логином, как прошедшее проверку подлинности.
  • Обновите пользователя с «посетителя» до «гостя», если он впервые входит в систему.

Что мне не хватает? Я хотел бы услышать ваши мысли.

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