Bagaimana cara menonaktifkan kors? Untuk beberapa alasan saya mengartikan asal-usul dan header yang diizinkan namun permintaan ajax saya masih mengeluh bahwa asal tidak diizinkan oleh kebijakan CORS saya ....
Pengontrol aplikasi saya:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :current_user, :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-Allow-Headers'] = '*'
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
if request.method == :options
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Allow-Headers'] = '*'
headers['Access-Control-Max-Age'] = '1728000'
render :text => '', :content_type => 'text/plain'
end
end
private
# get the user currently logged in
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
rute:
match "*all" => "application#cors_preflight_check", :constraints => { :method => "OPTIONS" }
match "/alert" => "alerts#create"
match "/alerts" => "alerts#get"
match "/login" => "sessions#create"
match "/logout" => "sessions#destroy"
match "/register" => "users#create"
Edit ---
Saya juga mencoba:
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options]
end
end
di application.rb
--edit 2 ---
Masalahnya adalah Ekstensi Chrome mungkin tidak mendukung CORS menurut saya. Bagaimana cara mengambil informasi dengan melewati CORS? Bagaimana saya harus menanggapi cek preflight?
ruby-on-rails
cors
Nonkonformis
sumber
sumber
Jawaban:
Saya memiliki persyaratan yang sama untuk API publik yang saya gunakan rails-api.
Saya juga menyetel header di filter sebelumnya. Ini terlihat seperti ini:
Sepertinya Anda melewatkan header Access-Control-Request-Method.
sumber
Lihat middleware rack-cors . Ini akan menangani header CORS dengan cara yang dapat dikonfigurasi.
sumber
Cukup Anda dapat menambahkan permata rack-cors https://rubygems.org/gems/rack-cors/versions/0.4.0
Langkah 1: tambahkan permata ke Gemfile Anda:
lalu simpan dan jalankan
bundle install
Langkah ke-2: perbarui file config / application.rb Anda dengan menambahkan ini:
untuk lebih jelasnya Anda dapat pergi ke https://github.com/cyu/rack-cors Specailly jika Anda tidak menggunakan rel 5.
sumber
.insert_before 0
itu penting. Sebelum saya menggunakanconfig.middleware.use
dan itu hanya berfungsi sampai saya ingin mengizinkan CORS untukpublic
direktori saya .Saya mengalami masalah, terutama dengan Chrome juga. Apa yang Anda lakukan pada dasarnya terlihat seperti apa yang saya lakukan di aplikasi saya. Satu-satunya perbedaan adalah saya merespons dengan nama host yang benar di header Origin CORS saya dan bukan wildcard. Menurut saya, Chrome pilih-pilih dengan ini.
Beralih antara pengembangan dan produksi sangat merepotkan, jadi saya menulis fungsi kecil ini yang membantu saya dalam mode pengembangan dan juga dalam mode produksi. Semua hal berikut terjadi dalam diri saya
application_controller.rb
kecuali jika dinyatakan lain, ini mungkin bukan solusi terbaik, tetapi pemeras juga tidak berhasil untuk saya, saya tidak dapat mengingat alasannya.Dan kemudian saya memiliki hal kecil ini
application_controller.rb
karena situs saya membutuhkan login:Di saya,
routes.rb
saya juga memiliki hal ini:dan metode ini terlihat seperti ini:
sumber
Saya pernah mengalami masalah serupa sebelumnya di mana ternyata browser web (dalam kasus saya chrome) itulah masalahnya.
Jika Anda menggunakan chrome, coba luncurkan begitu:
Untuk Windows:
1) Buat pintasan ke Chrome di desktop Anda. Klik kanan pada pintasan dan pilih Properti, lalu alihkan ke tab "Pintasan".
2) Di kolom "Target", tambahkan baris berikut: –args –disable-web-security
Untuk Mac, Buka jendela terminal dan jalankan dari baris perintah: open ~ / Applications / Google \ Chrome.app/ –args –disable-web-security
Info di atas dari:
http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/
sumber
Baru saja mengalami masalah ini di aplikasi rel saya dalam produksi. Banyak jawaban di sini memberi saya petunjuk dan membantu saya akhirnya sampai pada jawaban yang berhasil bagi saya.
Saya menjalankan Nginx dan itu cukup sederhana untuk hanya memodifikasi file my_app.conf (di mana my_app adalah nama aplikasi Anda). Anda dapat menemukan file ini di
/etc/nginx/conf.d
Jika Anda belum memilikinya
location / {}
Anda bisa menambahkannya di bawahserver {}
, lalu tambahkan diadd_header 'Access-Control-Allow-Origin' '*';
bawahlocation / {}
.Format akhir akan terlihat seperti ini:
sumber
Coba konfigurasi di /config/application.rb:
sumber