[Office] Версия 1.4.0 - работа с мобильными

Привет, друзья!

Как кто-то возможно помнит, в январе я рассказывал про создание сайта vrmedia.tv, на котором использовалась авторизация через мобильные телефоны. Тогда я написал для этого отдельный контроллер и много чего захардкодил.
И вот, спустя почти год, наконец-то дошли руки включить этот функционал в базовую поставку Office.

Теперь у нас есть новая системная настройка office_auth_mode, которая может быть в двух положениях: email или phone.
При переключении настройки в режим телефона email становится не нужен: регистрация, авторизация и сброс пароля работают через отправку sms сообщений.

Провайдеры


Следующая системная настройка, которая вам пригодится — указание класса работы с sms office_sms_provider. По умолчанию доступны SmsRu и ByteHand. Выбор сервисов обусловлен очень просто — именно с ними я уже работал, никаких предпочтений нет.

Для работы провайдеров используются следующие системные настройки
  • office_sms_id — идентификатор клиента на сервисе.
  • office_sms_key — ключ клиента на сервисе, для SmsRu не нужен.
  • office_sms_from — текстовое обозначение отправителя, его нужно согласовывать с сервисом.
Для добавления своего провайдера вам нужно создать новый класс в core/components/office/model/sms/myprovider.class.php. Внутри должно быть
<?php

class MyProvider {
	function __construct(modX $modx, array $config = array()) {
	        $this->modx = &$modx;
	}

	function send($phone, $text) {
		// Получаем системные настройки для работы и шлём сообщение

		return true; // или текст ошибки
	}
}
Ну и указать MyProvider в настройке office_sms_provider.

Кстати говоря, вы сможете использовать этого провайдера для любой другой произвольной работы вот так:
$provider = $modx->getOption('office_sms_provider');
if ($service = $modx->getService($provider, $provider, MODX_CORE_PATH . 'components/office/model/sms/')) {
	$send = $service->send('79234778899', 'Приветик!');
	return $send === true
		? 'Сообщение отправлено!'
		: 'Ошибка при отправке сообщения: ' . $send;
	}
}
Вот так просто.

Обновление


Если вы обновляете уже работающий проект, то помимо системных настроек вам нужно изменить и чанки:
  • В формах авторизации, регистрации и редактирования профиля нужно добавить поля с mobilephone и phone_code.
  • В почтовых уведомлениях нужно добавить проверку плейсхолдера [[+code]] и если он есть — выводить текст для телефонов, а не почты.
Все чанки лежат в core/components/office/elements/chunks — можно открывать и сравнивать со своими. Обратите внимание, что поле для ввода кода подтверждения по умолчанию скрыто классом hidden и показывается когда нужно ввести код из sms.

Другие изменения


— Весь код и чанки отформатированы в PSR-2. Потихоньку привожу все свои дополнения к единому стандарту.

— Убрано автоматическое подключение jQuery, многие на него ругались.

— Доработаны чанки активации email и телефонов — теперь они мультиязычные.

— HybridAuth больше не устанавливается вместе с Office автоматически. Во-первых, он не всем нужен, а во-вторых мне надоело объяснять, что на него поддержка платных дополнений не распространяется.

— Ошибки авторизации теперь логируются на уровне INFO вместо ERROR, а то уже все логи забиты неудачными попытками входа.

Заключение


В связи с добавлением нового функционала, цена на Office поднялась на 500 руб., до 1990 руб. Обновление со старых версий, как и всегда — бесплатное.

Для демонстрации нового функционала я временно (пока есть деньги на счёте sms.ru) включил его здесь, на modx.pro.
Заходите в личный кабинет и указывайте свой номер телефона — вам придёт sms с кодом подтверждения. Как только подтвердите свой телефон, можно будет использовать его для входа и сброса пароля.

Обновляемся, пишем отзывы.
Василий Наумкин
02 декабря 2016, 18:36
modx.pro
6
3 271
+19

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

Василий Столейков
02 декабря 2016, 22:19
1
+2
Спасибо за развитие компонента!
Особенно обрадовало это:
Кстати говоря, вы сможете использовать этого провайдера для любой другой произвольной работы
    Сергей Шлоков
    05 декабря 2016, 10:28
    +2
    Ошибки авторизации теперь логируются на уровне INFO вместо ERROR, а то уже все логи забиты неудачными попытками входа.
    За это отдельное спасибо!
      Сергей Лим
      05 декабря 2016, 10:56
      0
      Наконец-то, я этого ждал)
        Николаевич
        12 августа 2017, 20:39
        0
        Скажите, предусмотрена ли возможность выбора способа регистрации (email или номер) самим пользователем в момент регистрации? Или необходимо редактировать исходники?
          Василий Наумкин
          12 августа 2017, 20:52
          0
          Нет, не предусмотрена.

          Это решать только администрации сайта.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          5