Подготовить ограничения кода с явной проверкой диапазонов

Учебные задачи

Четыре параметра имеют разные границы. До присваивания проверяем целые числа и выводим срок в минутах, не путая ожидание повторной отправки с периодом действительности кода.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт и вызовите своей учебной командой.

  2. Во всех задачах Новый НастройкиВосстановленияПароля создаёт собственный объект в памяти. Код не устанавливает дополнительные параметры информационной базы и не запускает восстановление пароля.

  3. Не подставляйте реальные SMTP-пароли, OAuth-токены, адреса сотрудников и рабочие ссылки. example.invalid — учебный адрес, не настроенный почтовый сервер.

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

Проект = Новый НастройкиВосстановленияПароля;
Проект.СпособВосстановленияПароля = СпособВосстановленияПароляПользователяИнформационнойБазы.Нет;
ДлинаКода = 10;
СрокСекунд = 900;
ОжиданиеСекунд = 60;
ЧислоПопыток = 5;
Если ДлинаКода <> Цел(ДлинаКода) Или ДлинаКода < 8 Или ДлинаКода > 50 Тогда
    ВызватьИсключение "Длина кода: целое число от 8 до 50";
КонецЕсли;
Если СрокСекунд <> Цел(СрокСекунд) Или СрокСекунд < 1 Или СрокСекунд > 4294967295 Тогда
    ВызватьИсключение "Срок действия: целое число секунд от 1 до 4294967295";
КонецЕсли;
Если ОжиданиеСекунд <> Цел(ОжиданиеСекунд) Или ОжиданиеСекунд < 1 Или ОжиданиеСекунд > 999999999 Тогда
    ВызватьИсключение "Блокировка повторного запроса: целое число секунд от 1 до 999999999";
КонецЕсли;
Если ЧислоПопыток <> Цел(ЧислоПопыток) Или ЧислоПопыток < 1 Или ЧислоПопыток > 999 Тогда
    ВызватьИсключение "Число неуспешных попыток: целое число от 1 до 999";
КонецЕсли;
Проект.ДлинаКодаПодтверждения = ДлинаКода;
Проект.СрокДействияКодаПодтверждения = СрокСекунд;
Проект.ДлительностьБлокировкиЗапросаОбновленияКодаПодтверждения = ОжиданиеСекунд;
Проект.МаксимальноеКоличествоНеуспешныхПопытокПроверкиКодаПодтверждения = ЧислоПопыток;
Сообщить(Проект.ДлинаКодаПодтверждения = 10);
Сообщить(Проект.СрокДействияКодаПодтверждения / 60 = 15);
Сообщить(Проект.ДлительностьБлокировкиЗапросаОбновленияКодаПодтверждения = 60);
Сообщить(Проект.МаксимальноеКоличествоНеуспешныхПопытокПроверкиКодаПодтверждения = 5);

Разбор по шагам

  1. Все входные значения в этой задаче собственные числа. Для ввода из формы дополнительно проверьте тип до вызова Цел.

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

  3. 900 секунд — 15 минут действия кода; 60 секунд — ожидание следующего запроса. Это две разные шкалы.

  4. Длина 10, срок 900, ожидание 60 и попытки 5 выбраны для упражнения, не для автоматического применения в рабочей системе.

Как проверить результат

  1. Четыре сравнения Истина.

  2. Замените только ДлинаКода на 7 либо 10.5 и перезапустите: ожидается собственное понятное исключение до присваивания.

  3. Повторите с ЧислоПопыток=0: причина должна относиться именно к числу попыток.

Ожидаемый результат

Подготовлен проверенный локальный проект с раздельными единицами и ограничениями.

На что обратить внимание

  1. Не сокращайте ограничения без анализа безопасности и требований конкретной системы.

  2. Эти проверки не доказывают защиту от внешнего перебора: реальное восстановление пароля не запущено.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.