簡體   English   中英

如何使用 express-rate-limit 設置 X-RateLimit-Reset?

[英]How to set X-RateLimit-Reset with express-rate-limit?

我想設置用戶在達到速率限制時必須等待的自定義時間。 我正在使用express-rate-limit認為我可以通過在handler設置自定義X-RateLimit-Reset來做到這一點。 我可以設置這個值,但它似乎沒有任何效果。

作為一個極端的例子,我試圖在我的處理程序中使用以下內容在很長一段時間內阻止它們:

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

控制台登錄res ,這會產生無誤后:

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

但是,執行此操作后,用戶仍然可以調用本應進行速率限制的函數。 如何為用戶設置自定義重置時間?

首先,正如您沒有提到的,我假設您使用的是 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-redis存儲在x-ratelimit-reset標頭方面存在一些問題,並且無法按預期工作。 因此,您可以繼續使用其他選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM