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

nes*_*rbu 4 meteor ddp

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

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

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

hwi*_*son 5

我同意,文档需要做一些工作。为了在您的情况下完成这项工作(仅限登录用户),您需要如下内容:

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

这将导致updateUsernameRule规则仅与具有集合userId的用户(登录用户)匹配。所有其他未登录的用户将完全跳过此规则,并能够根据需要进行任意数量的请求。