it-swarm.com.ru

Источник запроса не разрешен: 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 работает, чтобы игнорировать запрос Origin, даже когда я включаю его в файл development.rb.

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

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

31
daybreaker

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

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

49
disastrous-charly

Из этого ответа , вы также можете добавить следующий код в 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:\/\/*/]
1
Giovanni Benussi