@MarkLb

Как правильно реализовать вариантивность регистрации по email или номеру телефона?

Допустим, на данный момент есть таблица user с набором полей:
- id[int, 11, primary, unique] - email[varchar, 255, key, unique]
- login[varchar, 255, key, unique] - password_hash[varchar, 255]

В качестве данных для авторизации используется пара login, password_hash.

Задача:
1. Убрать поле login из таблицы.
2. Ввести номер телефона. Дать возможность пользователю при регистрации использовать email ИЛИ номер телефона. То есть, только одно на выбор: либо email, либо номер телефона.

Вопрос в том, как это лучше реализовать задачу №2.

Я вижу это так: сделать поле email возможностью быть null, ввести поле phone_number с unique-индексом также с возможностью быть null. При регистрации в зависимости от выбора в одно из полей пишутся данные, другое остается со значением null.

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

Была альтернативная мысль в создании одного лишь поля идентификатора, куда пишется email/номер телефона. По-сути, цель поля одна - идентификация, а в back-end в некоторых местах(пример: восстановление пароля) можно создать метод для определения типа данных и уже этим манпулировать. Правда, при таком подходе если нужна выборка номера телефонов/email будут проблемы. Но можно создать отдельное поле, которое будет сообщать что хранится в идентификаторе - email или номер телефона.
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 1
riky
@riky
Laravel
unique index нужно делать на пару полей (phone, email).
в будущем возможно захочется чтобы один юзер мог логинится и по мылу и по емеилу. либо использовать второе на случай восстановления.

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

Войдите, чтобы написать ответ

Похожие вопросы