web-dev-qa-db-ja.com

Request Originは許可されていません:Rails5およびActionCableを使用する場合はhttp:// localhost:3001

Rails 5.0.0.beta2がActionCableを使用しようとしています。

Localhost:3000を使用すると、ほとんどのActionCableのデフォルトが正常に機能するため、正常に機能します。しかし、ポート3001でRailsサーバーを実行しようとすると、Request Origin not allowed: http://localhost:3001

ActionCableのドキュメントでは、ActionCable.server.config.allowed_request_origins = ['http://localhost:3001']config.ru

しかし、それはそれを置くには本当に奇妙な場所のようです。イニシャライザファイル、または私のdevelopment.rb環境設定ファイルに入れられるべきだと思います。

さらに、私のポイントを証明するために、それがshouldに入ることを許可されている、設定ActionCable.server.config.disable_request_forgery_protection = trueは、development.rbに含める場合でも、リクエストOriginを無視します。

なぜActionCable.server.config.disable_request_forgery_protection development.rbで動作しますが、ActionCable.server.config.allowed_request_originsは機能しません(ただし、config.ruで機能します)。

回避策としていくつかのオプションがあるので、差し迫った問題ではありません。私は、これがどのように機能するかについて私が明らかな何かを見逃しているかどうかを知りたいだけです。

34
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 を参照してください。

52

この回答 から、次のコードをconfig/environments/development.rbに追加して、httphttpsの両方からの要求を許可することもできます。

Rails.application.configure do
  # ...

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

config.action_cable.allowed_request_originsは、文字列の配列または正規表現を ドキュメント状態 として受け入れます。

アクションケーブルは、指定されたオリジンからのリクエストのみを受け入れ、それらのリクエストはアレイとしてサーバー設定に渡されます。発信元は、文字列または正規表現のインスタンスにすることができ、これに対して一致のチェックが実行されます。

以下にリストされている正規表現は、任意のドメインのhttphttpsの両方のURLに一致するため、それらを使用する場合は注意してください。どちらを使用するかは、好みの問題です。

  • [%r{https?://\S+}]この回答 から取得
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]
2