75

Rails 4 sembra impostare un valore predefinito di SAMEORIGIN per l'intestazione della risposta HTTP X-Frame-Options HTTP. Questo è ottimo per sicurezza, ma non consente che parti della tua app siano disponibili in un iframe su un dominio diverso.Come sovrascrivere X-Frame-Options per un controller o un'azione in Rails 4

È possibile ignorare il valore della X-Frame-Options a livello globale mediante l'impostazione config.action_dispatch.default_headers:

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

Ma come si fa a ignorare che solo per un singolo controller o azione?

risposta

122

Se si desidera rimuovere completamente l'intestazione, è possibile creare un after_action filtro:

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

    def embed 
    end 

private 

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

O, naturalmente, è possibile codificare il after_action per impostare il valore a qualcosa di diverso:

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 

Si noti che è necessario svuotare la cache in determinati browser (Chrome per me) durante il debug di questo.

+0

Come faresti funzionare su un redirect_to? (Sto provando in questo momento con la mia app Angular e non funziona) – kittyminky

+0

Suppongo che sia l'azione che contiene il 'redirect_to' che l'azione a cui reindirizza necessitino dell'applicazione di questo. Stai riscontrando un errore particolare? Sembra una buona nuova domanda su Stack Overflow! –

+0

Mi sono reso conto che avevo il 'after_action' * prima * che è stato reindirizzato all'azione del controller finale che reindirizza alle rotte' Angular'. Grazie! – kittyminky

Problemi correlati