69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
const rateLimit = require('express-rate-limit');
|
||
|
||
// 通用速率限制
|
||
const generalLimiter = rateLimit({
|
||
windowMs: 15 * 60 * 1000, // 15分钟
|
||
max: 100, // 限制每个IP 15分钟内最多100次请求
|
||
message: {
|
||
success: false,
|
||
message: '请求过于频繁,请稍后再试'
|
||
},
|
||
standardHeaders: true,
|
||
legacyHeaders: false,
|
||
});
|
||
|
||
// 登录注册接口限制(更严格)
|
||
const authLimiter = rateLimit({
|
||
windowMs: 15 * 60 * 1000, // 15分钟
|
||
max: 5, // 限制每个IP 15分钟内最多5次登录/注册尝试
|
||
message: {
|
||
success: false,
|
||
message: '登录/注册尝试过于频繁,请15分钟后再试'
|
||
},
|
||
standardHeaders: true,
|
||
legacyHeaders: false,
|
||
});
|
||
|
||
// OAuth授权接口限制(最严格)
|
||
const oauthAuthLimiter = rateLimit({
|
||
windowMs: 15 * 60 * 1000, // 15分钟
|
||
max: 10, // 限制每个IP 15分钟内最多3次OAuth授权尝试
|
||
message: {
|
||
success: false,
|
||
message: 'OAuth授权请求过于频繁,请15分钟后再试'
|
||
},
|
||
standardHeaders: true,
|
||
legacyHeaders: false,
|
||
});
|
||
|
||
// OAuth令牌接口限制(严格)
|
||
const oauthTokenLimiter = rateLimit({
|
||
windowMs: 15 * 60 * 1000, // 15分钟
|
||
max: 10, // 限制每个IP 15分钟内最多10次令牌请求
|
||
message: {
|
||
success: false,
|
||
message: '令牌请求过于频繁,请稍后再试'
|
||
},
|
||
standardHeaders: true,
|
||
legacyHeaders: false,
|
||
});
|
||
|
||
// OAuth客户端管理接口限制
|
||
const oauthClientLimiter = rateLimit({
|
||
windowMs: 15 * 60 * 1000, // 15分钟
|
||
max: 20, // 限制每个IP 15分钟内最多20次客户端管理操作
|
||
message: {
|
||
success: false,
|
||
message: '客户端管理操作过于频繁,请稍后再试'
|
||
},
|
||
standardHeaders: true,
|
||
legacyHeaders: false,
|
||
});
|
||
|
||
module.exports = {
|
||
generalLimiter,
|
||
authLimiter,
|
||
oauthAuthLimiter,
|
||
oauthTokenLimiter,
|
||
oauthClientLimiter
|
||
};
|