1. ホーム
  2. ruby-on-rails

[解決済み] Rails 4でコントローラやアクションのX-Frame-Optionsをオーバーライドする方法

2023-03-03 19:50:04

質問

Rails 4では、デフォルト値として SAMEORIGIN に対して X-Frame-Options HTTP レスポンスヘッダです。これは 素晴らしい セキュリティのために最適ですが、アプリの一部を iframe を別のドメインで利用することはできません。

の値を上書きすることができます。 X-Frame-Options の値をグローバルに上書きすることができます。 config.action_dispatch.default_headers を設定することで、グローバルに展開することができます。

config.action_dispatch.default_headers['X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"

しかし、単一のコントローラやアクションだけに対してどのようにオーバーライドするのでしょうか?

どのように解決するのでしょうか?

ヘッダを完全に削除したい場合は、ヘッダの上に after_action フィルタを使用します。

class FilesController < ApplicationController
  after_action :allow_iframe, only: :embed

  def embed
  end

private

  def allow_iframe
    response.headers.except! 'X-Frame-Options'
  end
end

あるいは、もちろん after_action をコーディングして、値を何か別のものに設定することもできます。

class FacebookController < ApplicationController
  after_action :allow_facebook_iframe

private

  def allow_facebook_iframe
    response.headers['X-Frame-Options'] = 'ALLOW-FROM https://apps.facebook.com'
  end
end

なお、デバッグ中は一部のブラウザ(私の場合はChrome)でキャッシュをクリアする必要があります。