# A sikertelen próbálkozások korlátozása BLOCKED-dal

> Számold a próbálkozásokat IP-címenként a BLOCKED()-dal, és válaszolj 429-cel a korlát elérésekor, bejelentkezésekhez és jelszó-visszaállításhoz.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: hu
Content-SHA256: bec569f8c3ea67616f18609f3fa3d77c3d6963b6fd7d892dafef3112a810f4b4
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

A `BLOCKED($, limit, expiration)` IP-címenként számolja a hívásokat. `true`-t ad vissza, ha a cím a lejáraton belül több mint `limit` hívást végzett (alapértelmezés: 5 hívás 15 perc alatt), előtte pedig `undefined`-ot. Hívd egy érzékeny handler elején, és állj meg, ha `true`-t ad. Egy cím megbocsátásához sikeres bejelentkezés után hívd a `BLOCKED($, -1)`-et.

A számlálók a folyamat memóriájában élnek; reverse proxy mögött gondoskodj róla, hogy a kliens valódi címe elérje a Total.js-t, különben mindenki egy számlálón osztozik.

```js controllers/login.js
exports.install = function() {
	ROUTE('POST /login/', login);
};

function login($) {

	if (BLOCKED($, 3, '1 minute')) {
		$.invalid(429);
		return;
	}

	if ($.body.password === 'correct') {
		BLOCKED($, -1);
		$.json({ ok: true });
	} else
		$.invalid(401);
}
```
