75

Rails 4 wydaje się ustawić domyślną wartość SAMEORIGIN dla nagłówka odpowiedzi HTTP X-Frame-Options. To jest świetne ze względów bezpieczeństwa, ale nie pozwala na to, aby części aplikacji były dostępne w domenie iframe w innej domenie.Jak przesłonić opcje X-Frame dla kontrolera lub akcji w Railsach 4

Można zastąpić wartość X-Frame-Options globalnie przy użyciu ustawienia config.action_dispatch.default_headers:

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

Ale w jaki sposób zastąpić go tylko dla pojedynczego kontrolera lub akcji?

Odpowiedz

122

Jeśli chcesz usunąć nagłówek całkowicie, można utworzyć after_action filtr:

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

    def embed 
    end 

private 

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

Albo, oczywiście, można kodować after_action aby ustawić wartość na coś innego:

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 

Pamiętaj, że musisz wyczyścić pamięć podręczną w niektórych przeglądarkach (Chrome dla mnie) podczas debugowania tego.

+0

Jak to zrobić, aby działało na przekierowanie? (Próbuję teraz z moją aplikacją Angular i nie działa) – kittyminky

+0

Zakładam, że zarówno akcja zawierająca "przekierowanie", jak i akcję, do której przekierowuje, wymagałaby zastosowania tej metody. Czy otrzymujesz konkretny błąd? Brzmi jak dobre nowe pytanie na Stack Overflow! –

+0

Zdałem sobie sprawę, że miałem 'after_action' * przed * został przekierowany do końcowego działania kontrolera, który przekierowuje na trasy' Angular'. Dziękuję Ci! – kittyminky