Meteor.js:DDPRateLimiter限制是全局的,而不是每个连接

Meteor.js:DDPRateLimiter限制是全局的,而不是每个连接,meteor,ddp,Meteor,Ddp,嗨,我正在使用DDPRateLimiter限制meteor.js中的一些方法的速率,我发现它限制了每个人的方法调用,而不仅仅是那个连接!例如,对于此规则: var updateUsernameRule = { type: 'method', name: 'updateUsername' }; DDPRateLimiter.addRule(updateUsernameRule, 1, 30000); 在一个浏览器中更新,然后在另一个浏览器中更新时,会导致速率限制错误。文档对此有点

嗨,我正在使用DDPRateLimiter限制meteor.js中的一些方法的速率,我发现它限制了每个人的方法调用,而不仅仅是那个连接!例如,对于此规则:

var updateUsernameRule = {
    type: 'method',
    name: 'updateUsername'
};
DDPRateLimiter.addRule(updateUsernameRule, 1, 30000);

在一个浏览器中更新,然后在另一个浏览器中更新时,会导致速率限制错误。文档对此有点不清楚,默认行为根本不是直观的。如何对每个用户进行费率限制?

我同意,文档需要做一些工作。要在您的情况下实现此功能(仅限登录用户),您需要以下内容:

const updateUsernameRule = {
  type: 'method',
  name: 'updateUsername',
  userId(userId) {
    if (userId) {
      return true;
    }
  }
};
DDPRateLimiter.addRule(updateUsernameRule, 1, 30000);

这将导致
updateUsernameRule
规则仅与具有一组
userId
(已登录用户)的用户匹配。所有其他未登录的用户都将完全跳过此规则,并能够发出任意数量的请求。

您的解决方案对此很有意义,但如果我想限制发送的邮件数量,该怎么办?如果我每秒执行10次方法调用的速率限制,这对于单个用户来说是合理的。但是如果我一次有100个用户登录,那么这个限制可能会达到。我刚开始研究速率限制,我很惊讶用户不容易做到这一点。我的答案中的速率限制规则是每个用户,因此每个用户在30秒内有一个请求。如果您配置了每个用户10个方法调用的限制,则每个用户将允许100个用户在定义的时间间隔内进行10个方法调用。谢谢。我想也许你的回答让我有点困惑。是否检查每个呼叫的用户ID?或者只是检查用户是否有Id?基本上:是限制所有登录用户每30秒1个请求,还是每个用户每30秒1个请求?每个用户每30秒1个请求;抱歉搞混了。是的,做得不错,谢谢!然而,DDPRateLimiter文档确实非常缺乏。即使是像这样基本的事情。这是一张为DDPRateLimiter创建更好文档的票,但它似乎将永远留在那里: