使用gatsby-source-strapi插件时返回403错误的原因是什么
gatsby-source-strapi v2 集成Strapi报403错误解决方案
核心原因
gatsby-source-strapi@^2.0.0 版本相较v1版本重构了拉取逻辑,除业务内容接口外,会默认请求Strapi的内容类型结构、权限配置等系统接口完成Gatsby节点生成,仅给自定义集合开find/findOne权限会直接触发403拦截。
修复步骤
- 补全公共角色必需权限
进入Strapi后台「设置-角色与权限-公共角色」配置页,除已开启的ekam集合find、findOne权限外,必须勾选以下系统权限后保存:- 内容类型生成器(content-type-builder)分类下所有get类权限,用于拉取内容类型schema
- 上传(upload)分类下find权限,兼容媒体字段拉取
- 用户权限(users-permissions)分类下getPermissions、getRoles权限,用于插件校验权限配置
- 修正gatsby-config.js插件配置
v2版本配置字段和v1不兼容,禁止沿用旧版contentTypes字段,正确配置参考:module.exports = { plugins: [ { resolve: "gatsby-source-strapi", options: { apiURL: "http://localhost:1337", // 替换为实际Strapi服务根地址,不要额外拼接/api后缀 collectionTypes: ["ekam"], // 对应自定义集合的pluralName,和你创建的ekam集合匹配即可 singleTypes: [], }, }, ], } - 清缓存重启服务
配置修改完成后先执行gatsby clean清除本地构建缓存,再重新运行gatsby develop即可。残留缓存会保留之前的鉴权失败状态,导致权限配置正确后依然报错。
常见踩坑:如果Strapi配置了全局api前缀、或者部署在非根路径下,
apiURL只需要写到Strapi服务的根域名/端口即可,插件会自动拼接接口路径,手动加后缀会导致路径匹配错误触发403/404。
内容的提问来源于stack exchange,提问作者Ek4m
相关产品推荐
相关产品推荐

