Rails 4 + angularjs CORS - 도메인 간 구현 방법

2485 단어 corsruby-on-rails
두 서버 사이에angularjs 앱과 rails의 RESTapi 통신을 실현하면 일반적으로CORS 경고의 오류가 발생합니다.CORS Cross-origin resourcesharing은 사실 브라우저 기술로 서버 자원이 다른 도메인 이름 아래 서버에서 읽을 수 있는지 정의합니다.

라우팅 옵션 추가 방법


도메인 간에 먼저 라우팅을 구성합니다.
ymlmatch 'customers', to: 'customers#index', via: [:options]
resources :users
````
   :
```ruby
   Prefix Verb    URI Pattern               Controller#Action
    users OPTIONS /customers(.:format)          customers#index
          GET     /customers(.:format)          customers#index
          POST    /customers(.:format)          customers#create
 new_user GET     /customers/new(.:format)      customers#new
edit_user GET     /customers/:id/edit(.:format) customers#edit
     user GET     /customers/:id(.:format)      customers#show
          PATCH   /customers/:id(.:format)      customers#update
          PUT     /customers/:id(.:format)      customers#update
          DELETE  /customers/:id(.:format)      customers#destroy
     root GET     /                             customers#index

여기 두 번째 줄에 옵션이 있어요.

before_ 추가filter 및 after_filter, CORS 활성화

rubyCustomersController < ApplicationController

  skip_before_filter :verify_authenticity_token
  before_filter :cors_preflight_check
  after_filter :cors_set_access_control_headers

  # For all responses in this controller, return the CORS access control headers.
  def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age'] = "1728000"
  end

  # If this is a preflight OPTIONS request, then short-circuit the
  # request, return only the necessary headers and return an empty
  # text/plain.

  def cors_preflight_check
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version'
    headers['Access-Control-Max-Age'] = '1728000'
  end

  def index
    @customers = Customer.all

    respond_to do |format|
      format.json { render :json => @customers }
    end
  end
end

skip_ 추가before_filter :verify_authenticity_token은 rails의 422를 건너뛰기 위한 것입니다 ('Can't verify CSRF token authenticity')

좋은 웹페이지 즐겨찾기