Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

Принципы

Восстановление пароля проводится в 3 шага. На первом шаге абонент вводит номер телефона, в Гидре происходит поиск абонента по номеру телефона. Если абонент найден, то система переходит ко второму шагу. На втором шаге абоненту отправляется случайный код, например, через СМС. На третьем шаге абонент вводит полученный код, затем вводит новый пароль. После процедуры восстановления пароля необходимо залогиниться в ЛК с новым паролем.

Конфигурационные файлы

Пример конфига

config/hupo_configuration.default.yml
password_recovery:
  enabled: false
  cache:
    expiration: 5 # minutes
  resend_interval: 30 # seconds
  phone_prefix: ""
  recovery_code_length: 4 # minimum 2
  script_path: /etc/hydra/hupo/recovery_script.sh
  max_codes_number: 3
  • enabled — признак активности восстановления пароля. Может принимать значения true/false;

  • cache.expiration — время в минутах в течение которого хранятся данные для восстановления пароля (количество запрошенных кодов подтверждения, текущий код подтверждения);

  • resend_interval — время в секундах, которое будет ждать абонент, прежде чем сможет повторно отправить код подтверждения;

  • phone_prefix — префикс телефонного номера, который отображается на форме ввода номера и добавляется в начало номера телефона для поиска в Гидре и скрипт по отправке СМС;

  • recovery_code_length — количество цифр в коде подтверждения;

  • script_path — путь к скрипту для отправки СМС (или любого другого способа оповещения абонента). ЛК передает в скрипт 3 параметра:

    1. сообщение с кодом подтверждения, например "Код подтверждения 0102", задаётся в locales/ru.yml, ключ password_recovery.recovery_message;

    2. строку с кодом подтверждения, например "0102";
    3. номер телефона, который был использован для поиска абонента в Гидре (без плюса, скобок "(", ")", минусов и пробелов), например 79035301234;
  • max_codes_number — максимальное количество отправки кодов подтверждения за один цикл восстановления пароля.

Подробное описание

Шаги, из которых состоит восстановление пароля, можно разбить на более мелкие.

Поиск абонента

Процесс начинается с перехода по ссылке "Забыли пароль?" на форме логина. Ссылка показывается только если в конфиге enabled: true.

После перехода по ссылке предлагается ввести логин и телефон для поиска абонента в Гидре.

На скриншоте у телефона есть префикс: "+7". Префикс задаётся в конфиге в поле phone_prefix в виде строки. Он будет использоваться для поиска телефона в Гидре, для отправки СМС. 

Логин — логин из доступа к приложению ЛК, телефон — включенный основной телефон для уведомлений, привязанный к БСУ.

Перед поиском из номера телефона удаляются круглые скобки, знак плюса, минусы и пробелы. При нашей конфигурации если абонент ввёл текст "(915) - 777 - 88 - 99", то для поиска используется строка "79157778899". Логин не изменяется.

Если абонент подобрался, то мы переходим к следующему шагу, иначе показывается ошибка: "Абонент с такими данными не существует".

Все коды ошибок заданы в locales/ru.yml, ключ password_recovery.errors.

Генерация кода подтверждения

Длина кода подтверждения задаётся в конфиге в recovery_code_length. Код подтверждения генерируется и хранится в виде строки. Это нужно для того, чтобы работали коды вида "0001".

Затем код и другие данные (дата генерации кода, время хранения записи, логин, телефон, счётчик текущего кода подтверждения) сохраняются в кеш. Если необходимо, такие записи можно найти в кеше по ключу с логином. Формат ключа: "recovery_#{login}". В нашем случае сохранится запись с ключом: "recovery_sir_arthur".

Вызов скрипта для отправки сообщения

Путь к скрипту задаётся в конфиге в script_path. Это должен быть .sh скрипт, который принимает 3 параметра. Они описаны в разделе с конфигом. Предполагается, что в скрипте будет дёргаться отправка СМС сообщения на номер абонента.

После вызова скрипта абонента перебрасывает на страницу с вводом кода подтверждения.

Ввод кода подтверждения

Абонент получает код на телефон и вводит его в поле "Код". Если код совпадает с сохраненным в кеше, то абонент переходит на шаг смены пароля. Если код не приходит, то можно отправить повторно с помощью ссылки "Отправить ещё раз". Повторная отправка вызовет генерацию нового кода, вызовет скрипт для отправки СМС и обновит запись в кеше.

Для повторной отправки установлен таймаут в секундах, который задаётся в конфиге в resend_interval. Таймер с таймаутом будет работать даже после обновления страницы.

Количество повторных отправок тоже ограничено параметром в конфиге max_codes_number. Если абонент превысит число повторных отправок, то будет выведена ошибка "Превышено число повторных обращений. Обратитесь в контактный центр".

Если абонент ввёл правильный код, то его перебросит на страницу ввода нового пароля.

 

Надо понимать, что восстановление пароля и все ограничения (на таймаут, повторную отправку) действуют в течение времени жизни записи в кеше. Это значение задаётся в конфиге в cache.expiration в минутах.

  • No labels