Четыре параметра имеют разные границы. До присваивания проверяем целые числа и выводим срок в минутах, не путая ожидание повторной отправки с периодом действительности кода.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт и вызовите своей учебной командой.
Во всех задачах Новый НастройкиВосстановленияПароля создаёт собственный объект в памяти. Код не устанавливает дополнительные параметры информационной базы и не запускает восстановление пароля.
Не подставляйте реальные SMTP-пароли, OAuth-токены, адреса сотрудников и рабочие ссылки. example.invalid — учебный адрес, не настроенный почтовый сервер.
Каждый пример выполняйте отдельно. Вывод и свойства проверяются в сообщениях/отладчике; доставки письма, изменения пароля и открытия сайта не будет.
Проект = Новый НастройкиВосстановленияПароля;
Проект.СпособВосстановленияПароля = СпособВосстановленияПароляПользователяИнформационнойБазы.Нет;
ДлинаКода = 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);Разбор по шагам
Все входные значения в этой задаче собственные числа. Для ввода из формы дополнительно проверьте тип до вызова Цел.
Отдельно проверяем дробность и границы каждого значения; отрицательные, нулевые и выходящие за границы значения не присваиваются.
900 секунд — 15 минут действия кода; 60 секунд — ожидание следующего запроса. Это две разные шкалы.
Длина 10, срок 900, ожидание 60 и попытки 5 выбраны для упражнения, не для автоматического применения в рабочей системе.
Как проверить результат
Четыре сравнения Истина.
Замените только ДлинаКода на 7 либо 10.5 и перезапустите: ожидается собственное понятное исключение до присваивания.
Повторите с ЧислоПопыток=0: причина должна относиться именно к числу попыток.
Ожидаемый результат
Подготовлен проверенный локальный проект с раздельными единицами и ограничениями.
На что обратить внимание
Не сокращайте ограничения без анализа безопасности и требований конкретной системы.
Эти проверки не доказывают защиту от внешнего перебора: реальное восстановление пароля не запущено.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.