Rail-5.1 APIでrack-cors gemを使用しています。
ドキュメントに従って、次のイニシャライザを持っています。
config/initializers/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つは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
(初期化子は環境設定ファイルの後に呼び出されるため、これは機能するはずです)。
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
ファイルを保存します。これで、許可されるorigins変数が暗号化されたファイルに含まれます。そして、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