Strapi使用实践(二)接口权限管理与访问频率限制

Strapi使用实践(二)接口权限管理与访问频率限制

上一篇说到403访问拒绝

权限设置

回到admin 界面,在插件里有个Roles & Permissions插件,所有的访问权限都在这里配置。

image.png

界面可以看到有两个现成的角色,其中Authenticated 角色是用户登录之后的默认角色,public 角色就是通常说的anonymous 匿名用户。

因为没注册用户,先设置public 角色的权限。

点开public,可以看到下面的权限里,已经有了我们前面创建的两个api的接口设置。
image.png

右边显示对应接口的url以及高级的设置(频率限制和是否需要认证)

image.png

默认的ratelimit是每分钟十次(可以自定义,后续再说)。

设置好接口权限后,再回到文档页面,现在就不会报错了。

自定义频率设置

strapi是利用koa2-ratelimit实现的频率限制

创建限制规则

在项目目录下的 extensions/users-permissions/config/policies 新建一个 rateLimit.js文件,添加如下内容

const lazyRateLimit = {
    get RateLimit() {
      return require('koa2-ratelimit').RateLimit;
    },
  };
  
  module.exports = async (ctx, next) => {
    const message = [
      {
        messages: [
          {
            id: 'Auth.form.error.ratelimit',
            message: 'Too many attempts, please try again in a minute.',
          },
        ],
      },
    ];

    return lazyRateLimit.RateLimit.middleware(
      Object.assign(
          {},
          {
          interval: 1 * 60 * 1000,   
          max: 10,                      
          prefixKey: `${ctx.request.url}:${ctx.request.ip}`,
          message,
          }
      )
    )(ctx, next);
    
  };

通过这个文件可以自定义设置,例如根据用户名等等。

灵活使用

在项目目录下的api目录可以看到自动生成的两个文件夹,分别对应前面创建的两张表。

假设需要设置文章list接口的频率,只需要在对应的config/routes.json下修改即可。

      "method": "GET",
      "path": "/articles",
      "handler": "article.find",
      "config": {
        "policies": ["global.rateLimit"]  // 添加这个
      }

重启服务,现在,这个接口就会遵循刚才设置的频率规则。

注:如果通过文件自定义设置了规则,又在前端指定了ratelimit,而且文件的规则恰好是 prefixKey: ${ctx.request.url}:${ctx.request.ip},会出现一次访问相当于两次访问的情况,请仔细注意。

# NodeJs  strapi 

右下角对话与我联系。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×