Menu
CoddyTech

Um contador com expiração

Parte da seção Autenticação e segurança do Journey de Node.js da Coddy. Lição 22 de 24.

Uma janela fixa conta as tentativas a partir de um horário inicial. Armazene since junto com a contagem. Para uma janela de um minuto, ela expira quando now - since chega a 60000 milissegundos.

// Uma janela de dez segundos neste exemplo
if (now - since >= 10000) {
    count = 0;
    since = now;
}
count += 1;

Durante a janela, mantenha o horário inicial original. Alterá-lo após cada tentativa faria o tempo de espera continuar aumentando. Esta prática fornece now para que você possa testar o limite sem esperar. Um servidor em execução obtém o horário atual de Date.now(). O projeto de login usa o mesmo registro { count, since }.

challenge icon

Desafio

Fácil

Atualize um registro de falhas de um minuto em exercise.js. Se now - since for pelo menos 60000, inicie uma nova janela em now com contagem 1. Caso contrário, aumente a contagem e mantenha since. Retorne ambos os campos.

POST {"count":3,"since":0,"now":10000}: espere {"count":4,"since":0}. Em now:60000, espere {"count":1,"since":60000}.

O GET /result inicial usa o exemplo fornecido {"count": 2, "since": 1000, "now": 61000}. Use POST /result com um corpo JSON para testar outras entradas.

Experimente você mesmo

export function exercise({ count, since, now }) {
    return { count: count + 1, since };
}

Todas as lições de Autenticação e segurança

Pratique por conta própria: Playground de Express