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

Какие уже события отслеживаются?

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

Главный модуль, событие OnBeforeUserUpdate

Используется для защиты от смены пользователем номера телефона на произвольный, не подтвержденный. Отключить защиту можно в настройках модуля.

Главный модуль, событие OnBeforeProlog

Используется для восстановления доступа пользователя к сайту через email. После запроса, на почту отправляется письмо с ссылкой для автоматической авторизации на сайте, при клике по которой, пользователь будет переадресован на сайт.

В результат сработает этот обработчик и в случае наличия соответствующей метки в URL адресе проверит корректность всех данных и в случае если все врено и время действия ссылки не истекло, то авторизует пользователя.

Какие события есть в модуле Авторизации по номеру телефона, для взаимодействия?

Так как модуль написан используя новое ядро битрикса -  D7, то в модуле доступны события добавления, редактирования, удаления записей из базы данных для следующих классов:
  • \Bxmaker\AuthUserPhone\Manager
  • \Bxmaker\AuthUserPhone\Manager\Limit
/* события - 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

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

Если же модуль не установлен, то необходимо самостоятельно написать код, отсылающий временный код в смс.

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

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

Событие onUserChangePassword

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

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

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

Событие onUserAdd

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

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

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