首页 > 解决方案 > Rails 5.2 CORS 被阻止

问题描述

提前感谢任何可以帮助我的人!

我正在使用 React 和 Webpacker 运行 Rails 5.2 应用程序,我想在用户登录时为他们显示 Gravatar 图标,但我一直被浏览器 CORB 阻止。

我一直在查看所有 Rack CORS 文档和 Stack Overflow 上关于使用 CORS 设置导轨的条目,但我似乎仍然无法让它工作。我allowed-origins在标题中看不到 ,并且对 Gravatar.com 的请求继续被阻止。

如https://stackoverflow.com/a/56772510/759615config/credentials.yml.enc中所述,我已经使用我的主机名设置了我的主机名:

development:
 allowed_origins:
   - http://localhost:3000
   - http://127.0.0.1:3000

production:
 allowed_origins:
   - http://productionurl1.com
   - http://productionurl2.com

application.rb

  class Application < Rails::Application

    config.load_defaults 5.2

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins Rails.application.credentials[Rails.env.to_sym][:allowed_origins]

        resource '*',
                 headers: :origin,
                 methods: [:get, :post, :options, :put]
      end
    end
  end

application.rb为了测试这个概念,我还尝试了一个完全开放的 CORS 配置:

...
     allow do
        origins '*'
    ...

对于本地环境,我已经为 dev_server 设置了标头config/webpacker.yml

      'Access-Control-Allow-Origin': 'http://localhost:3000/'

(其中我也尝试了 Webpacker 主机名,127.0.0.1但无济于事)

有很多变量,我可能错过了一些东西或更可能误解了文档中的含义,但我真的希望那里有人能得到我正在寻找的 CORS 答案!

标签: ruby-on-railscorsruby-on-rails-5.2webpackerrack-cors

解决方案


Rack::Cors在没有变量的项目中使用:

config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:5000', /https*:\/\/.*?domain\.(com|org)\/*/, /https:\/\/another_domain\.my_domain\.org/
    resource '*', headers: :any, methods: :any, credentials: true
  end
end

而且效果很好。


推荐阅读