rmc*_*rry 8 ruby-on-rails cors rack-cors
我正在使用带有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
Run Code Online (Sandbox Code Playgroud)
但是,这意味着当部署到生产时,我的api将接受来自任何localhost:4200来源的请求.
如何将这些设置分开,以便不同的环境可以具有不同的允许来源?
Gre*_*tek 11
有几种不同的选择.一个是使用secrets.yml文件.在那里你可以为每个环境定义不同的值,让我们说:
development:
allowed_origins:
- http://localhost:4200
production:
allowed_origins:
- http://productionurl1.com
- http://productionurl2.com
Run Code Online (Sandbox Code Playgroud)
然后在配置文件中即可
module Api
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins Rails.application.secrets.allowed_origins
end
end
end
Run Code Online (Sandbox Code Playgroud)
另一个选项(取自评论)是使用环境文件,例如:
/development.rb
config.allowed_cors_origins = ["http://localhost:4200"]
Run Code Online (Sandbox Code Playgroud)
然后在cors.rb初始化程序中,您可以:
Rails.application.config.allowed_cors_origins
Run Code Online (Sandbox Code Playgroud)
(因为初始化程序将在环境配置文件之后调用,这应该可行).
对于使用Rails 5.2的任何人,secrets.yml已经进行了更改,现在我们需要使用凭据。为了使用它,我们需要编辑config/credentials.yml.enc
首先,运行命令EDITOR="atom --wait" rails credentials:edit(使用您选择的编辑器)。然后,将原点添加为可接受的答案:
development:
allowed_origins:
- http://localhost:4200
production:
allowed_origins:
- http://productionurl1.com
- http://productionurl2.com
Run Code Online (Sandbox Code Playgroud)
保存文件。现在,允许的原点变量将位于加密文件中。然后在cors初始化程序中(在我的情况下,它在application.rb中)
config.middleware.insert_before 0, Rack::Cors do
allow do
origins Rails.application.credentials[Rails.env.to_sym][:allowed_origins]
resource '*',
headers: :any,
expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'],
methods: [:get, :post, :options, :delete, :put]
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3465 次 |
| 最近记录: |