Подтвердить что ты не робот

Происхождение запроса не разрешено: 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

Но это похоже на действительно странное место. Я чувствую, что он должен быть в состоянии войти в файл инициализации или в файл конфигурации среды разработки .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)?

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

4b9b3361

Ответ 2

Из этого ответа вы также можете добавить следующий код в 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 будет принимать запросы только от указанного источника, которые передаются в конфигурацию сервера как массив. Истоки могут быть экземплярами строк или регулярных выражений, против которых будет выполняться проверка соответствия.

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

  • [%r{https?://\S+}] # Из этого ответа
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/,/https:\/\/*/]