Rails部署Heroku+Netlify出现Access-Control-Allow-Credentials错误求助
问题解决方案
报错的根本原因是后端CORS配置的凭证权限和前端请求的凭证模式不匹配,你当前的cors.rb中credentials设为了false,但前端发起请求时用了credentials: 'include',导致预检请求校验失败,本地开发时前后端通常在同个域名下不会触发跨域校验,因此部署到不同平台才会暴露该问题。
第一步:修改后端CORS配置
修改config/initializers/cors.rb文件,将credentials的参数值改为true,修改后的配置如下:
Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins "https://photo-sharer-kkirby16.netlify.app" resource "*", headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head], credentials: true end end
修改完成后重新部署你的Heroku后端服务。
第二步:回滚无效的前端修改
你之前尝试的几个前端配置不仅不能解决问题,还可能引发其他异常,请全部撤销:
- 删除所有fetch请求中的
mode: "no-cors"配置,该模式会限制前端读取接口返回内容,无法适配需要携带认证信息的业务场景 - 删除所有fetch请求headers中手动添加的
"Access-Control-Allow-Credentials": true配置,CORS相关响应头只能由后端返回,前端在请求中添加该字段没有任何作用,反而可能触发额外的跨域校验失败
config/application.rb中的config.hosts.clear配置不影响本次跨域问题,如果你没有其他自定义域名接入需求可以保留。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

