[英]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
標頭,該程序包會為您完成。
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.