1 of 10

Cross-Origin Resource Sharing with Rails

Piotr Misiurek @ WRUG 19.06.2012

www.piotrmisiurek.pl

www.salelo.com

2 of 10

CORS to rozwiązanie wobec

ograniczeń Same Origin Policy:

ograniczenie do zasobów pochodząych z innych domen/hostów

3 of 10

A czasem chcielibyśmy z nich korzystać w pełni:

- JSON API używane przez AJAXa

4 of 10

Jak obejść Same Origin Policy:

  • server proxy
  • JSONP
  • CORS

5 of 10

nowa metoda http OPTIONS

  • pyta o uprawniania, co może zrobić z dokumentem
  • przeglądarki wysyłają ją same
  • odpowiedź to pusty dokument z odpowiednimi nagłówkami

6 of 10

RAILS

  • odpowiedź dla OPTIONS (routes i nagłówki)
  • dodać nagłówki do właściwego rządania

7 of 10

match "*path" => "cross_domains#options_request", constraints: {method: 'OPTIONS'}

8 of 10

class Api::CrossDomainsController < Api::ApplicationController

def options_request

headers['Access-Control-Allow-Origin'] = '*'

headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'

headers['Access-Control-Allow-Headers'] = 'X-CSRF-Token'

headers['Access-Control-Max-Age'] = '1728000'

render text: ''

end

end

9 of 10

module Api

class ApplicationController < ActionController::Base

respond_to :json

before_filter :set_headers

def set_headers

headers['Access-Control-Allow-Origin'] = '*'

headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'

headers['Access-Control-Max-Age'] = "1728000"

end

end

end

10 of 10