Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Karma
    félisten

    Köszi,

    Hát ezt egy kicsit későn láttam meg, közben előálltam egy béta verzióval saját kútfőből, de le fogom cserélni az általad linkelt elegánsabb megoldásra.

    Azért, mert tudom, hogy így illik, a megoldás:

    const { AuthError, LoginError } = require('blabla');
    const THRESHOLD_OF_TRIES = 3; // 3 tries until drop
    const DEFAULT_TIMEOUT = 300000; // 5mins in milliseconds
    const cache = {};

    module.exports = function * rateLimiter(next) {

    const user = this.request.body.email;

    if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() < cache[user].dropUntil) {
    this.throw(423); // Locked for 5 mins
    }
    else if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() > cache[user].dropUntil) {
    delete cache[user];
    }

    try {
    yield next;
    }
    catch (err) {
    if (err instanceof AuthError || err instanceof LoginError) {
    if (!cache[user]) {
    cache[user] = {
    tries: 1,
    dropUntil: null
    };
    }
    else {
    cache[user].tries++;
    if (cache[user].tries >= THRESHOLD_OF_TRIES) {
    cache[user].dropUntil = Date.now() + DEFAULT_TIMEOUT;
    }
    }
    this.throw(err);
    }
    console.error(err);
    }

    };

    Egyáltalán nem biztos, hogy az általam linkelt jobb vagy hatékonyabb :) Csak hogy kész.

    Amúgy ilyet még nem is láttam, generátor alapú middleware?
    Milyen frameworköt használsz?

Új hozzászólás Aktív témák