Авторизация по любому полю данных пользователя

Рейтинг: 4.1494  
В работе
Предложил Пользователь 147460 17.07.2013 14:35:32

Авторизация по любому полю данных пользователя

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

Админка.
В настройках гл.модуля в разделе "Авторизация" сделать пункт множественного выбора "Авторизовывать по". Это выпадающий список с кнопками "Добавить" и "Удалить" (или чекбоксы) с перечислением всех полей пользователя.Очень хорошо если тут же будут пользовательские поля. Если не выбрано ни одно поле, то авторизация идёт по логину.Так же есть галочка "Общая уникальность" (подробнее ниже).
Например: мы выбрали e-mail и телефон.
При создании(изменении) пользователя эти поля будут проверены на уникальность. Если выставлена галочка "Общая уникальность", то проверка уникальности конкретного авторизационного поля будет проверена со значениями всех заполненых авторизационных полей.
Например: если у нас в системе уже есть пользователь с телефоном "123", и мы создаём пользователя с e-mail "123", то система выдаст сообщение об ошибке.
Так же следует проверить на заполнение по принципу "обязательное для ввода хотя бы одно".
* Если логин не выбран для авторизации, но он заполняется автоматически (правило автоформирования логина любое).
* Если логин выбран как единственное поле для авторизации, то его заполнение обязательно.
* Если логин выбран для авторизации вместе с какими-либо другими полями, то в случае пустого ввода он заполяется автоматически.
Т.о. по полю логин авторизация возможна всегда. Т.е. при полном изменении настроек полей для авторизации уже созданные пользователи всегда смогут войти под своим логином.

Публичкая часть.
При регистрации поля для авторизации должны быть выделено по особому и указано хотя бы одно из них. Соответственно должна быть проверка на уникальность. По завершении регистрации выводится сообщение об успешной регистрации, а также присвоенный логин, в случае если логин быть сформирован автоматом (хотя его можно выводить всегда).
Форма авторизации. Её вид будет зависеть от галочки "Общая уникальность". Если галочка выставлена, то форма будет включать 2 поля: "Пользователь" и "Пароль". В поле "пользователь" для авторизации можно будет вбить значение любого из авторизационных полей или логин. Если галочка не выставлена, то в место поля "пользователь" будут выведены все авторизационные поля + логин (естественно при кастомизации ненужные можно будет скрыть).
Форма "Забыли пароль". Вместо полей "логин" и "почта" будет поле "Пользователь" или набор "авторизационных полей" в зависимости от галочки настроек "Общая уникальность".

С таким решением при настроках по умолчанию (не выбраны авторизационные поля) система будет работать ровно так же как и сейчас. К тому же решение позволит реализовать регистрацию и авторизацию по любому полю пользователя, например по "E-mail" или "Мобильный", а так же по нескольким из них сразу.
Если вас заинетесует эта тема или у вас возникнуть вопросы по логике работы решения, пишите на yarm_ksv@mail.ru. Я с удовольствием расскажу свои видения решений пролем данной тематики.