Авторизация по email и номеру телефона
Доброго времени суток!
Возникла необходимость реализовать возможность входа на сайт как по e-mail + пароль, так и по номеру телефона + пароль.
Так как опыта в этом дела мало и гугл не помог, то я решил обратиться в вам, уважаемое сообщество.
Реально ли это реализовать с помощью preHook'а Login'a? Или можно как-то расширить для этого HybridAuth?
Куда вообще копать? Выполнима ли вообще задача без ковыряния ядра?
Единственный вариант, который приходит в голову: получать введенный номер > искать его в базе > получать из базы e-mail > сравнивать email с паролем. Но, признаться, я слабо представляю как это реализовать.
Может быть уже кто-то делал подобное и готов поделиться наработками?
Буду рад любому совету.
Возникла необходимость реализовать возможность входа на сайт как по e-mail + пароль, так и по номеру телефона + пароль.
Так как опыта в этом дела мало и гугл не помог, то я решил обратиться в вам, уважаемое сообщество.
Реально ли это реализовать с помощью preHook'а Login'a? Или можно как-то расширить для этого HybridAuth?
Куда вообще копать? Выполнима ли вообще задача без ковыряния ядра?
Единственный вариант, который приходит в голову: получать введенный номер > искать его в базе > получать из базы e-mail > сравнивать email с паролем. Но, признаться, я слабо представляю как это реализовать.
Может быть уже кто-то делал подобное и готов поделиться наработками?
Буду рад любому совету.
Комментарии: 6
мне кажется что preHook должен прокатить, что то типа
$username= $hook->getValue('email');
if(empty($username)){
$username= $hook->getValue('phone');
}
$hook->setValue('username', $username);
Думаю можно написать плагин.
OnBeforeWebLogin — насколько я понимаю это событие срабатывает до начала процесса авторизации.
Этим событием ловим процесс аутентификации получаем с формы данные поля юсер нейм и ищем в юзерх по 3м полям, мылу телефону и юзернейму, если у какого то юзера, что то из этого нашлось, то на данном этапе можно подпихнуть в параметр username нужный логин (чисто теоретически).
OnBeforeWebLogin — насколько я понимаю это событие срабатывает до начала процесса авторизации.
Этим событием ловим процесс аутентификации получаем с формы данные поля юсер нейм и ищем в юзерх по 3м полям, мылу телефону и юзернейму, если у какого то юзера, что то из этого нашлось, то на данном этапе можно подпихнуть в параметр username нужный логин (чисто теоретически).
М.б. эта запись относится к вопросам, а не к готовым решениям?
В посте решения нет.
В посте решения нет.
OnBeforeWebLogin — во выходит даже так, что это событие по умолчанию запрещает логинить юзера.
То есть мы отшибаем процесс авторизации этим событием, ищем нужного юзера по введенным данным и логиним его сами и все.
То есть мы отшибаем процесс авторизации этим событием, ищем нужного юзера по введенным данным и логиним его сами и все.
Вот нашел решение
Плагин вешается на событие onUserNotFound
// Try to find by email
$modx->event->_output = $modx->getObjectGraph('modUser', '{"Profile":{},"UserSettings":{}}', array ('Profile.email' => $scriptProperties['username']));
Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логинитьсяПлагин вешается на событие onUserNotFound
Спасибо. Работает!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.