0

我想设置一个用户在达到速率限制时必须等待的自定义时间。我正在使用express-rate-limit认为我可以通过X-RateLimit-Resethandler. 我可以设置这个值,但它似乎没有任何效果。

作为一个极端的例子,我试图在未来很长一段时间内使用我的处理程序中的以下内容来阻止它们:

res.setHeader('X-RateLimit-Reset', Date.now() + 100000000000)

在此之后的控制台日志记录res是正确的:

 'x-ratelimit-reset': [ 'X-RateLimit-Reset', 1566112162159 ] // <-- far in the future

但是,在这样做之后,用户仍然能够调用本应受到速率限制的函数。如何为用户设置自定义重置时间?

4

1 回答 1

1

首先,正如您没有提到的那样,我假设您使用的是 express-rate-limit 附带的默认 MemoryStore。因此,要回答您的问题,您不必x-ratelimit-reset在响应中手动设置标题,包会为您完成。

  • 因此,如果您使用默认的 MemoryStore,则配置如下所示,
app.use(
    RateLimit({
        windowMs: 10 * 60 * 1000 , // 10 minutes
        max: 100, // limit each IP to 100 requests per windowMs
        message: 'You have exceeded the 100 requests in 10 minutes limit!',
    })
);
  • 而且,如果您使用的商店不是默认商店,您可以在其中添加商店配置,
app.use(
    RateLimit({
        store: new MongoStore({
            uri: 'mongodb://localhost:27017/your-db-name',
            expireTimeMs: 10 * 60 * 1000 // 10 minutes
        }),
        windowMs: 10 * 60 * 1000 , // 10 minutes
        max: 100, // limit each IP to 100 requests per windowMs
        message: 'You have exceeded the 100 requests in 10 minutes limit!',
    })
);

在这里需要注意的是,rate-limt-redisstore 的 header 存在一些问题,x-ratelimit-reset并且无法按预期工作。因此,您可以继续使用其他选项。

于 2020-07-13T07:34:40.747 回答