Strapi v4自定义CORS配置失败,如何限制仅指定URL可访问?
环境信息
- Strapi版本: v4
- Node版本: 16
- NPM版本: 6.14.16
- Yarn版本: 1.22.19
我试了两种配置CORS的方法都没效果,现在还是能从localhost:3000发起请求,这不是我要的结果。我只想限制几个指定URL才能访问我的Strapi服务,翻官方文档没找到明确的配置方法,求帮忙。
已尝试的操作
- 在
config/server.js中配置:
settings: { cors: { enabled: false, origin: ["http://test.com"], }, },
- 在
config/middleware.js中配置:
{ name: "stapi::cors", config: { origin: ["http://test.com"] } },
正确配置方案
你之前的配置有两个关键错误,这才导致限制没生效:
config/server.js里把cors.enabled设为false会直接关闭CORS校验,localhost自然能随便访问,必须改成true。config/middleware.js里的中间件名称写错了,是strapi::cors不是stapi::cors。
下面是两种正确的配置方式,选一种就行:
方式一:修改config/server.js
module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), app: { keys: env.array('APP_KEYS'), }, settings: { cors: { enabled: true, // 必须开启校验 origin: ["http://test.com", "https://your-second-domain.com"], // 填入需要允许的所有URL credentials: true, // 如果前端需要携带Cookie,就开这个,可选 }, }, });
方式二:修改config/middleware.js
module.exports = [ // 保留其他默认中间件,只修改cors部分 { name: 'strapi::cors', config: { origin: ["http://test.com", "https://your-second-domain.com"], credentials: true, }, }, // 其他中间件... ];
重要提示
- 改完配置一定要重启Strapi服务,不然不会生效。
- 如果需要区分开发/生产环境,可以对应修改
config/env/development/server.js或config/env/production/server.js。 - 允许的URL要写完整,包括http/https协议,不能只写域名。
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

