Источник запроса не разрешен: http://localhost:3001 при использовании Rails5 и ActionCable

Возникли проблемы с сервером, когда приложение в Rails 5.0.0.beta2 пытается использовать ActionCable.

Использование localhost:3000 работает нормально, так как это то, что по умолчанию использует большинство ActionCable. Но если я попытаюсь запустить сервер rails на порту 3001, он выдаст мне Request origin not allowed: http://localhost:3001

В документах ActionCable упоминается использование чего-то вроде ActionCable.server.config.allowed_request_origins = ['http://localhost:3001'], что действительно работает для меня, если я помещу его в config.ru

Но это кажется действительно странным местом для его размещения. Я чувствую, что он должен быть в состоянии войти в файл инициализатора или в мой файл конфигурации среды development.rb.

Чтобы еще раз доказать мою точку зрения о том, что ему должно быть разрешено входить туда, параметр ActionCable.server.config.disable_request_forgery_protection = true игнорирует источник запроса, даже когда я включаю его в development.rb.

Почему ActionCable.server.config.disable_request_forgery_protection работает в development.rb, а ActionCable.server.config.allowed_request_origins нет (но работает в config.ru)?

Не насущная проблема, так как у меня есть несколько вариантов обходного пути. Я просто хочу знать, не упускаю ли я что-то очевидное в том, как я представляю, как это должно работать.


person daybreaker    schedule 03.02.2016    source источник


Ответы (3)


Вы можете поместить Rails.application.config.action_cable.allowed_request_origins = ['http://localhost:3001'] в свой файл development.rb

См. https://github.com/rails/rails/tree/master/actioncable#allowed-request-origins для получения дополнительной информации

person disastrous-charly    schedule 16.02.2016
comment
Спасибо. Очевидно, они обновили это через 4 дня после моего вопроса :-P Но я бы не увидел его, если бы вы не ответили здесь! - person daybreaker; 16.02.2016

Из этого ответа вы также можете добавить следующий код в config/environments/development.rb, чтобы разрешить запросы как от http, так и от https:

Rails.application.configure do
  # ...

  config.action_cable.allowed_request_origins = [%r{https?://\S+}]
end

config.action_cable.allowed_request_origins принимает массив строк или регулярных выражений в качестве состояний документации:

Action Cable будет принимать запросы только из указанных источников, которые передаются в конфигурацию сервера в виде массива. Источниками могут быть экземпляры строк или регулярных выражений, по которым будет выполняться проверка на соответствие.

Приведенное ниже регулярное выражение будет соответствовать URL-адресам http и https из любого домена, поэтому будьте осторожны при их использовании. Это просто вопрос предпочтения, какой из них использовать.

  • [%r{https?://\S+}] # Взято из этого ответа
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]
person Giovanni Benussi    schedule 27.11.2018

Для моего флаттер-приложения источник запроса был нулевым. Итак, нужно добавить nil в список.

Я добавил этот код в config/environments/development.rb, и он работает!

config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/, /file:\/\/*/, 'file://', nil]
person mahfuz    schedule 23.01.2021