База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как переписать код проверки двухфакторной аутентификации с 3 попытками?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 неделя назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
15 апреля 2026 в 12:41 #36444
Для Попытка = 1 По 3 Цикл
Данные = ПроверитьКодДвухФакторнойАутентификации(Логин, КодOTP);Если Данные.КодОтвета = 200 Тогда
ДобавитьЗаписьВЖурналРегистрации(«Аутентификация выполнена», Логин);
Результат.Сообщение = «Аутентификация выполнена»;
Результат.Выполнено = Истина;
Прервать;
КонецЕсли;
КонецЦикла;Если НЕ Результат.Выполнено Тогда
ТекстОшибки = ?(ЗначениеЗаполнено(Данные.Сообщение), Данные.Сообщение, «Ошибка проверки кода»);
ДобавитьЗаписьВЖурналРегистрации(ТекстОшибки, Логин, Истина);
Результат.Сообщение = «Ошибка проверки кода»;
КонецЕсли; Вот код проверки ответа сервиса проверки кода двухфакторной аутентификаци. Функция ПроверитьКодДвухФакторнойАутентификации возвращает результат структуры с полями Выполнено, Сообщение, КодОтвета. Нужно переписать код таким образом, чтобы фукнция проверки вызвалась максимум три раза в случае если КодОтвета не равен 200. Т.е. первый вызов — код не равен 200, вызываем еще раз. Если код не равен 200, то вызываем еще раз. Если код не равен 200, то возвращаем ответ. Если какой-то вызов сразу возврает код 200, то возвращать ответ -
15 апреля 2026 в 12:41 #36445
Вот переписанный код с нужной логикой — функция проверки вызывается максимум 3 раза, и если в любой из попыток КодОтвета = 200, цикл прерывается и возвращается результат. Если после 3 попыток код не 200, возвращается последний результат с ошибкой:
1С (Код)1234567891011121314151617Для Попытка = 1 По 3 ЦиклДанные = ПроверитьКодДвухФакторнойАутентификации(Логин, КодOTP);Если Данные.КодОтвета = 200 ТогдаДобавитьЗаписьВЖурналРегистрации("Аутентификация выполнена", Логин);Результат.Сообщение = "Аутентификация выполнена";Результат.Выполнено = Истина;Прервать;КонецЕсли;КонецЦикла;Если НЕ Результат.Выполнено ТогдаТекстОшибки = ?(ЗначениеЗаполнено(Данные.Сообщение), Данные.Сообщение, "Ошибка проверки кода");ДобавитьЗаписьВЖурналРегистрации(ТекстОшибки, Логин, Истина);Результат.Сообщение = ТекстОшибки;Результат.Выполнено = Ложь;КонецЕсли;Объяснение:
— Цикл 3 раза вызывает функцию.
— Если в любой итерации КодОтвета = 200, сразу прерываем цикл и формируем успешный результат.
— Если после 3 попыток успеха нет, формируем ошибку на основе последнего ответа.
— ПеременнаяРезультат.Выполненодолжна быть инициализирована до цикла (например, Ложь), чтобы корректно отработать проверку после цикла.Если нужно, можно добавить инициализацию
Результат.Выполнено = Ложьперед циклом.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.