Как установить разрешенный источник для запроса хоста в Rails 5 - PullRequest
0 голосов
/ 04 июня 2018

Я пишу приложение с парой API, которые должны быть доступны с любого хоста.Итак, до сих пор я обрабатывал это в своем application.rb следующим образом:

config.action_dispatch.default_headers = {
  'Access-Control-Allow-Origin' => '*'
}

Однако один из клиентов, который обращается к API, не позволяет получать данные из источников, где '*'определено.Моя идея состояла в том, чтобы динамически установить разрешенный источник на тот, который запрашивает API.Примерно так:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins ActionDispatch::Request.headers['Host']

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

Но так как cors.rb является инициализатором, у него нет доступа к поступающим запросам. Есть ли способ сделать список источников динамическим, поэтому он всегда будетпросто включить запрос хоста?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

А если ты это сделаешь?

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    # this proc should return true or false
    origins { |source, env| true }
    resource '*', headers: :any, methods: %i[get post put patch delete options head]
  end
end
0 голосов
/ 04 июня 2018

Вы можете просто сделать это с before_action в вашем контроллере.

class ApiBaseController < ApplicationController
  before_action :set_cors_headers

  private

  def set_cors_headers
    response.set_header "Access-Control-Allow-Origin", origin
  end

  def origin
    request.headers["Origin"] || "*"
  end
end
...