75

Rails 4 scheint einen Standardwert von SAMEORIGIN für den HTTP-Antwortheaderfestzulegen. Dies ist groß für Sicherheit, aber es nicht für Teile Ihrer App in einer iframe auf einer anderen Domäne verfügbar sein.So überschreiben Sie X-Frame-Optionen für einen Controller oder eine Aktion in Rails 4

Sie können den Wert von X-Frame-Options global überschreiben die config.action_dispatch.default_headers Einstellung mit:

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

Aber, wie Sie es für nur einen einzigen Controller oder Aktion kann außer Kraft setzen?

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

    def embed 
    end 

private 

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

Oder natürlich, können Sie die after_action unterschiedliche den Wert auf etwas einstellen kann Code:

Antwort

122

Wenn Sie den Header vollständig entfernen möchten, können Sie einen after_action Filter erstellen

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 

Beachten Sie, dass Sie Ihren Cache in bestimmten Browsern (Chrome für mich) löschen müssen, während Sie dies debuggen.

+0

Wie würden Sie dies auf einer redirect_to arbeiten? (Ich versuche gerade mit meiner Angular-App, und es funktioniert nicht) – kittyminky

+0

Ich würde annehmen, dass sowohl die Aktion, die das 'redirect_to' enthält, als auch die Aktion, zu der es weitergeleitet wird, dies anwenden muss. Erhalten Sie einen bestimmten Fehler? Klingt wie eine gute neue Frage auf Stack Overflow! –

+0

Mir wurde klar, dass ich die 'after_action' * hatte, bevor * sie auf die finale Controller-Aktion umgeleitet wurde, die auf die 'Angular'-Routen umleitet. Vielen Dank! – kittyminky

Verwandte Themen