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

События

Прослушиваемые события

При установке модуля сразу регистрируются обработчики на события:

  • Главный модуль, событие OnBeforeUserUpdate - используется для защиты от смены пользователем номера телефона на произвольный, не подтвержденный. Отключить защиту можно в настройках модуля.
  • Главный модуль, событие OnBeforeProlog - используется для восстановления доступа пользователя к сайту через email. После запроса, на почту отправляется письмо с ссылкой для автоматической авторизации на сайте, при клике по которой, пользователь будет переадресован на сайт. В результат сработает этот обработчик и в случае наличия соответствующей метки в URL адресе проверит корректность всех данных и в случае если все врено и время действия ссылки не истекло, то авторизует пользователя.

Cобытия модуля

Так как модуль написан используя новое ядро битрикса - D7, то в модуле доступны события добавления, редактирования, удаления записей из базы данных для следующих классов \Bxmaker\AuthUserPhone\Manager, \Bxmaker\AuthUserPhone\Manager\Limit

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

\Bxmaker\AuthUserPhone\Manager
\Bxmaker\AuthUserPhone\Manager\Limit
\Bxmaker\AuthUserPhone\Manager\Ip\Limit
\Bxmaker\AuthUserPhone\Service\History

/* события - OnBeforeAdd, OnAfterAdd, OnBeforeDelete, OnAfterDelete, OnBeforeUpdate, OnAfterUpdate */

AddEventHandler('bxmaker.authuserphone', '\Bxmaker\AuthUserPhone\Manager::OnBeforeAdd', 'bxmaker_authuserphone_onBeforeAdd');


use \Bitrix\Main\Entity; /* стоку разместить в начале файла */

function bxmaker_smsnotice_onBeforeAdd(Entity\Event $event)
{
    $result = new Entity\EventResult;
    $data = $event->getParameter("fields");

    if (isset($data['STATUS']))
    {
        /* установка времени добавления кода отправленного на телефон*/
        $result->modifyFields(array('TIME' => new \Bitrix\Main\Type\DateTime()));
    }

    // $result->unsetFields(array('TIME'));

    return $result;
}

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

onSendCode

Событие onSendCode - вызывается в момент необходимости отправить смс с временным кодом. Если установлен модуль СМС оповещений, то на это событие уже в системе добавлены будут соответствующие обработчики. Если же модуль не установлен, то необходимо самостоятельно написать код, отсылающий временный код в смс.

При вызове события передаются 3 поля:

  • PHONE - телефон уже подготовленный, без лишних символов, например 79991112233
  • PHONE_RAW - телефон в сыром виде, который получил модуль перед вызовом события, например 7 (999) 111-22-33
  • CODE - временный код который надо отправить пользователю, на указанный номер
/* регистрация обработчика события */
AddEventHandler('bxmaker.authuserphone', 'onSendCode','bxmaker_authuserphone_onSendCode');

function bxmaker_authuserphone_onSendCode($arFields)
{
    send_sms($arFields['PHONE'], 'Ваш временный код - ' . $arFields['CODE']);
}

onUserChangePassword

Событие onUserChangePassword - вызывается после смены пароля пользователя.

Передаваемые поля:

  • USER_ID - идентификатор пользователя,
  • PHON - подготовленный номер, без лишних символов,
  • PASSWORD - новый пароль.
/* регистрация обработчика события */
AddEventHandler('bxmaker.authuserphone', 'onUserChangePassword','bxmaker_authuserphone_onUserChangePassword');

function bxmaker_authuserphone_onUserChangePassword($arFields)
{
    send_sms($arFields['PHONE'], 'Ваш новый пароль - ' . $arFields['PASSWORD']);
}

onUserAdd

Событие onUserAdd вызывается после добавления, регистрации пользователя.

Передаваемые поля:

  • PHONE - подготовленный телефон,
  • PASSWORD - пароль,
  • USER_ID - идентификатор добавленного пользователя.
/* регистрация обработчика события */
AddEventHandler('bxmaker.authuserphone', 'onUserAdd','bxmaker_authuserphone_onUserAdd');

function bxmaker_authuserphone_onUserAdd($arFields)
{
    send_sms($arFields['PHONE'], 'Вы успешно зарегистрированы на сайте, используйте для входа логин - '.$arFields['PHONE'].' и пароль - ' . $arFields['PASSWORD']);
}