You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于用户ID(userId)配置请求速率限制器(rate limiter)?

基于用户ID(userId)配置express-rate-limit速率限制器

当然可以实现基于userId的限流,express-rate-limit提供了keyGenerator配置项,允许你自定义限流的标识依据,替代默认的IP地址。

修改后的示例代码

import rateLimit from 'express-rate-limit'

const apiLimiter = rateLimit({
    windowMs: 10000, // 10秒
    max: 1,
    standardHeaders: true,
    legacyHeaders: false,
    // 自定义限流标识生成函数
    keyGenerator: (req) => {
        // 假设用户已登录,userId存储在req.user对象中
        // 如果你的userId是从token解析或其他方式获取,替换成对应的取值逻辑
        if (req.user?.userId) {
            return req.user.userId;
        }
        // 未登录用户 fallback 到IP限流,避免匿名用户无限制请求
        return req.ip;
    }
})

app.use('/api', apiLimiter, /* 你的接口处理逻辑 */)

关键说明

  • keyGenerator函数接收请求对象req作为参数,返回的字符串会作为限流的唯一标识。
  • 你需要确保req.user.userId是正确的用户标识来源,比如从JWT解析后挂载到req对象,或者从session中获取,根据你的鉴权逻辑调整即可。
  • 保留未登录用户的IP限流逻辑,能避免匿名用户绕过限制,提升接口安全性。

内容的提问来源于stack exchange,提问作者dark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:45:35