首页 文章

Rails 5.1 CORS - 如何为不同的环境设置不同的来源

提问于
浏览
2

我正在使用带有Rail 5.1 API的rack-cors gem .

根据文档我有以下初始化程序:

配置/初始化/ cors.rb

module Api
  Rails.application.config.middleware.insert_before 0, Rack::Cors do
    allow do
      origins ['http://localhost:4200','https://app.mydomain.com/']

      resource '*',
        headers: :any,
        :expose  => ['access-token', 'expiry', 'token-type', 'uid', 'client'],        
        methods: [:get, :post, :put, :patch, :delete, :options, :head]
    end
  end
end

但是,这意味着当部署到 生产环境 时,我的api将接受来自任何 localhost:4200 来源的请求 .

如何将这些设置分开,以便不同的环境可以具有不同的允许来源?

1 回答

  • 4

    有几种不同的选择 . 一种是使用 secrets.yml 文件 . 在那里你可以为每个环境定义不同的值,让我们说:

    development:
      allowed_origins:
        - http://localhost:4200
    
    production:
      allowed_origins:
        - http://productionurl1.com
        - http://productionurl2.com
    

    然后在配置文件中即可

    module Api
      Rails.application.config.middleware.insert_before 0, Rack::Cors do
        allow do
          origins Rails.application.secrets.allowed_origins
        end
      end
    end
    

    另一个选项(取自评论)是使用环境文件,例如:

    /development.rb

    config.allowed_cors_origins = ["http://localhost:4200"]
    

    然后在 cors.rb 初始化程序中,您可以执行以下操作:

    Rails.application.config.allowed_cors_origins
    

    (因为初始化程序将在环境配置文件之后调用,这应该可行) .

相关问题