Meteor.js: DDPRateLimiter 限制是全局的,而不是每个连接
Meteor.js: DDPRateLimiter limit is global, not per connection
您好,我正在使用 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
的用户(已登录用户)。所有其他未登录的用户将完全跳过此规则,并能够根据需要发出任意数量的请求。
您好,我正在使用 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
的用户(已登录用户)。所有其他未登录的用户将完全跳过此规则,并能够根据需要发出任意数量的请求。