web-dev-qa-db-ja.com

Rails 4でコントローラーまたはアクションのX-Frame-Optionsをオーバーライドする方法

Rails 4は、X-Frame-Options HTTP応答ヘッダーにSAMEORIGINのデフォルト値を設定しているようです。これはセキュリティのためにgreatですが、アプリの一部を別のドメインのiframeで使用することはできません。

X-Frame-Options設定を使用して、config.action_dispatch.default_headersの値をグローバルにオーバーライドできます。

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

しかし、単一のコントローラーまたはアクションだけでそれをどのようにオーバーライドしますか?

82
Chris Peters

ヘッダーを完全に削除する場合は、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の場合)でキャッシュをクリアする必要があることに注意してください。

130
Chris Peters