节点js速率限制

Mih*_*tel 5 javascript api rate-limiting node.js

我正在尝试使用express-rate-limit在我的应用上设置API速率限制.如果来自相同的IP地址,它可以工作.一旦达到最大值5,我会收到一条错误消息.但是,当从不同的IP地址/计算机尝试它时,它会失败.知道如何解决这个问题吗?我尝试使用127.0.0.1生成密钥,无论哪个IP地址,但也失败了.

以下是我的代码:

// Rate Limit
var RateLimit = require('express-rate-limit');

app.enable('trust proxy');

var limiter = new RateLimit({
  windowMs: 365*24*60*60*1000, // 1 year
  max: 5, // limit each IP to 1 requests per windowMs
  delayMs: 365*24*60*60*1000, // delaying - 365 days until the max limit is reached
  message: "Sorry, the maximum limit of 50 letters sent has been reached. Thank you for participating!",
  keyGenerator: function (req) {
    req.ip = "127.0.0.1";
    // req.ip = "ip address";
    return req.ip;
  }
});

app.use('/api/letter', limiter); 
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 7

所使用的内存存储实现express-rate-limit用途setTimeout()明确后店里windowMs毫秒。

根据 Node.js文档setTimeout()

当延迟大于 2147483647 或小于 1 时,延迟将设置为 1。

在您的情况下,延迟大于该数量,即31536000000毫秒。这导致存储永远不会存储任何数据超过 1 毫秒。

要解决这个问题,您可能必须实现自己的商店(请参阅store选项),或者寻找没有此限制的替代速率限制器(在我看来,由于到期时间如此之长,您需要一些无论如何都是持久存储)。