Выполните запрос HTTP OPTIONS от Rails 5 для предполетной проверки CORS или иным образом.

Изменить: я повторно добавил метод параметров в запрос на перенос в Rails, который теперь должен быть активен. В приведенном ниже ответе больше нет необходимости. Позвоните по телефону process(:options, path, **args), чтобы оформить запрос на опции.

При необходимости см. commit 1f979184efc27e73f42c5d86c7f19437c6719612.

Я читал другие ответы, и ни один из них, похоже, не работал в Rails 5. Удивительно, что Rails не просто поставляется с методом параметров, но вот и мы. Конечно, если вы можете использовать xdomain, вам, вероятно, следует (изменить: я больше не придерживаюсь этого представления, у CORS есть преимущества), потому что он быстрее (нет двойной задержки перед проверкой!), Проще (нет нужны глупые заголовки / методы HTTP!), и многое другое поддерживается (работает практически везде!), но иногда вам просто нужно поддерживать CORS, и что-то в драгоценном камне CORS заставляет его не работать для вас.


person zachaysan    schedule 03.10.2016    source источник


Ответы (1)


Вверху вашего config/routes.rb файла поместите следующее:

match "/example/",
  controller: "example_controller",
  action: "options_request",
  via: [:options]

И в вашем контроллере напишите:

def options_request
  # Your code goes here.
end

Если вы заинтересованы в написании интеграционного теста, существует некоторая дезинформация о методе process, который на самом деле не является общедоступным. Для поддержки запросов OPTIONS из ваших интеграционных тестов создайте инициализатор (мой находится по адресу: config/initializers/integration_test_overrides.rb, потому что я переопределяю ряд вещей) и добавьте следующий код:

class ActionDispatch::Integration::Session

  def http_options_request(path)
    process(:options, path)
  end

end

Чтобы вы могли вызвать http_options_request из своего интеграционного теста.

person zachaysan    schedule 03.10.2016