Авторизация по email и номеру телефона

Доброго времени суток!
Возникла необходимость реализовать возможность входа на сайт как по e-mail + пароль, так и по номеру телефона + пароль.
Так как опыта в этом дела мало и гугл не помог, то я решил обратиться в вам, уважаемое сообщество.

Реально ли это реализовать с помощью preHook'а Login'a? Или можно как-то расширить для этого HybridAuth?
Куда вообще копать? Выполнима ли вообще задача без ковыряния ядра?
Единственный вариант, который приходит в голову: получать введенный номер > искать его в базе > получать из базы e-mail > сравнивать email с паролем. Но, признаться, я слабо представляю как это реализовать.
Может быть уже кто-то делал подобное и готов поделиться наработками?

Буду рад любому совету.
Евгений
20 марта 2015, 04:49
modx.pro
2
3 703
0

Комментарии: 6

Наумов Алексей
20 марта 2015, 08:50
0
мне кажется что preHook должен прокатить, что то типа

$username= $hook->getValue('email');
if(empty($username)){
  $username= $hook->getValue('phone');
}

$hook->setValue('username', $username);
    Мордынский Николай
    20 марта 2015, 11:25
    0
    Думаю можно написать плагин.

    OnBeforeWebLogin — насколько я понимаю это событие срабатывает до начала процесса авторизации.

    Этим событием ловим процесс аутентификации получаем с формы данные поля юсер нейм и ищем в юзерх по 3м полям, мылу телефону и юзернейму, если у какого то юзера, что то из этого нашлось, то на данном этапе можно подпихнуть в параметр username нужный логин (чисто теоретически).
      Павел Левин
      20 марта 2015, 11:45
      0
      М.б. эта запись относится к вопросам, а не к готовым решениям?
      В посте решения нет.
        Мордынский Николай
        20 марта 2015, 11:51
        0
        OnBeforeWebLogin — во выходит даже так, что это событие по умолчанию запрещает логинить юзера.

        То есть мы отшибаем процесс авторизации этим событием, ищем нужного юзера по введенным данным и логиним его сами и все.
          Мордынский Николай
          20 марта 2015, 17:32
          5
          +1
          Вот нашел решение

          // Try to find by email
          $modx->event->_output = $modx->getObjectGraph('modUser', '{"Profile":{},"UserSettings":{}}', array ('Profile.email' => $scriptProperties['username']));
          Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логиниться

          Плагин вешается на событие onUserNotFound
            Евгений
            23 марта 2015, 03:17
            0
            Спасибо. Работает!
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            6