nakama/backend/middleware/rateLimiter.js

58 lines
2.0 KiB
JavaScript
Raw Normal View History

2025-11-03 20:35:01 +00:00
const rateLimit = require('express-rate-limit');
// Общий лимит для API
const generalLimiter = rateLimit({
2025-11-04 22:23:33 +00:00
windowMs: 15 * 1000, // 15 секунд
2025-11-03 20:35:01 +00:00
max: 100, // 100 запросов
message: 'Слишком много запросов, попробуйте позже',
standardHeaders: true,
legacyHeaders: false,
});
// Строгий лимит для создания постов
const postCreationLimiter = rateLimit({
2025-11-04 22:23:33 +00:00
windowMs: 15 * 1000, // 15 секунд
max: 10, // 10 постов
2025-11-03 20:35:01 +00:00
message: 'Вы создаёте слишком много постов, подождите немного',
skipSuccessfulRequests: true,
});
// Лимит для авторизации
const authLimiter = rateLimit({
2025-11-04 22:23:33 +00:00
windowMs: 15 * 1000, // 15 секунд
2025-11-03 20:35:01 +00:00
max: 5, // 5 попыток
message: 'Слишком много попыток авторизации',
});
// Лимит для поиска
const searchLimiter = rateLimit({
2025-11-04 22:23:33 +00:00
windowMs: 15 * 1000, // 15 секунд
2025-11-03 20:35:01 +00:00
max: 30, // 30 запросов
message: 'Слишком много поисковых запросов',
});
// Лимит для лайков/комментариев (защита от спама)
const interactionLimiter = rateLimit({
2025-11-04 22:23:33 +00:00
windowMs: 15 * 1000, // 15 секунд
2025-11-03 20:35:01 +00:00
max: 20, // 20 действий
message: 'Вы слишком активны, немного подождите',
});
2025-12-01 01:11:27 +00:00
// Мягкий лимит для прокси изображений (больше запросов, так как это медиа)
const proxyLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 200, // 200 запросов (больше для загрузки множества изображений)
message: 'Слишком много запросов изображений',
skipSuccessfulRequests: true, // Не считать успешные запросы
});
2025-11-03 20:35:01 +00:00
module.exports = {
generalLimiter,
postCreationLimiter,
authLimiter,
searchLimiter,
2025-12-01 01:11:27 +00:00
interactionLimiter,
proxyLimiter
2025-11-03 20:35:01 +00:00
};