Menu
CoddyTech

Подсчёт неудачных попыток

Часть раздела Аутентификация и безопасность путешествия по Node.js на Coddy. Урок 21 из 24.

Ограничитель входа должен помнить о неудачных попытках между запросами. Map хранит значения по ключам. Используйте имя каждого пользователя в качестве ключа, чтобы неудачные попытки для одной учётной записи не влияли на другую.

const counts = new Map();
const old = counts.get('bo') ?? 0;
counts.set('bo', old + 1);

counts.get(key) возвращает undefined для отсутствующего ключа, поэтому начальное значение счётчика равно нулю. Объявите Map вне функции обработки запросов, чтобы она сохраняла данные, пока работает этот сервер. В этом упражнении каждый запрос представляет собой неудачную попытку. Сброс по истечении времени будет отдельным шагом; сейчас эта Map продолжает вести подсчёт, пока нажатие «Играть» не перезапустит сервер.

challenge icon

Задание

Легко

Это небольшой практический проект. Его настройка уже выполнена; редактируйте только exercise.js.

Увеличьте счётчик для указанного имени пользователя и верните его в count. Дважды отправьте POST {"username":"ada"} на /result: счётчики будут равны 1, затем 2. Отправка bo даст 1; повторная отправка ada даст 3.

Создайте Map самостоятельно и разместите её так, чтобы при втором запросе было видно первое значение счётчика. Повторное нажатие «Играть» перезапускает сервер и очищает это хранилище в памяти.

Попробуйте сами

// Создайте хранилище счётчиков, которое будет сохраняться между запросами.
export function exercise({ username }) {
    return { count: 0 };
}

Все уроки раздела Аутентификация и безопасность

Потренируйтесь самостоятельно: Песочница Express