it-swarm.asia

السماح لأي شيء من خلال سياسة كورس

كيف يمكنني تعطيل كورس؟ لسبب ما ، قمت بتمشيط الأصول والرؤوس المسموح بها ، لكن طلبات أياكس الخاصة بي ما زالت تشكو من أن الأصل غير مسموح به بموجب سياسة CORS الخاصة بي ....

جهاز التحكم في التطبيقات:

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

الطرق:

  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"

تصحيح---

لقد جربت أيضًا:

   config.middleware.use Rack::Cors do
      allow do
        origins '*'
        resource '*', 
            :headers => :any, 
            :methods => [:get, :post, :delete, :put, :options]
      end
    end

في application.rb

- التعديل 2 ---

المشكلة هي أن إضافات Chrome قد لا تدعم CORS على ما أعتقد. كيف يمكنني إحضار معلومات تتجاوز CORS؟ كيف يجب أن أرد على اختبار الاختبار المبدئي؟

88
Nonconformist

لديّ نفس متطلباتك في واجهة برمجة تطبيقات عامة استخدمتها Rails-api.

لقد قمت أيضا بتعيين رأس في قبل مرشح. تبدو هكذا:

headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
headers['Access-Control-Request-Method'] = '*'
headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'

يبدو أنك فاتتك رأس الوصول إلى التحكم في الطلب.

142
matteo

إلقاء نظرة على كور رف الوسيطة. سوف يتعامل مع رؤوس CORS بطريقة قابلة للتكوين.

19
Jef

يمكنك ببساطة إضافة جوهرة الحوامل https://rubygems.org/gems/rack-cors/versions/0.4.0

الخطوة الأولى: أضف جوهرة إلى ملف Gemfile الخاص بك:

gem 'rack-cors', :require => 'rack/cors'

ثم قم بحفظ وتشغيل bundle install

الخطوة الثانية: تحديث ملف config/application.rb الخاص بك عن طريق إضافة هذا:

config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end

لمزيد من التفاصيل ، يمكنك الذهاب إلى https://github.com/cyu/rack-cors Specailly إذا كنت لا تستخدم Rails 5.

6
Abdallah Okasha

أواجه مشكلات ، خاصة مع Chrome أيضًا. ما قمت به يبدو بشكل أساسي مثل ما فعلت في طلبي. الاختلاف الوحيد هو أنني أستجيب بأسماء مضيف صحيحة في رؤوس My CORS وليس بدل. يبدو لي أن Chrome صعب الإرضاء بهذا.

التبديل بين التطوير والإنتاج هو ألم ، لذلك كتبت هذه الوظيفة الصغيرة التي تساعدني في وضع التطوير وأيضًا في وضع الإنتاج. تحدث كل الأشياء التالية في application_controller.rb الخاص بي ما لم يُذكر خلاف ذلك ، قد لا يكون هذا هو الحل الأفضل ، لكن rack-cors لم ينجح معي أيضًا ، لا أستطيع تذكر السبب.

def add_cors_headers
  Origin = request.headers["Origin"]
  unless (not Origin.nil?) and (Origin == "http://localhost" or Origin.starts_with? "http://localhost:")
    Origin = "https://your.production-site.org"
  end
  headers['Access-Control-Allow-Origin'] = Origin
  headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT, DELETE'
  allow_headers = request.headers["Access-Control-Request-Headers"]
  if allow_headers.nil?
    #shouldn't happen, but better be safe
    allow_headers = 'Origin, Authorization, Accept, Content-Type'
  end
  headers['Access-Control-Allow-Headers'] = allow_headers
  headers['Access-Control-Allow-Credentials'] = 'true'
  headers['Access-Control-Max-Age'] = '1728000'
end

ثم لدي هذا الشيء القليل في application_controller.rb لأن موقعي يتطلب تسجيل دخول:

before_filter :add_cors_headers
before_filter {authenticate_user! unless request.method == "OPTIONS"}

في routes.rb لدي أيضًا هذا الشيء:

match '*path', :controller => 'application', :action => 'empty', :constraints => {:method => "OPTIONS"}

وهذه الطريقة تبدو كالتالي:

def empty
  render :nothing => true
end
5
Christoph Eicke

لقد واجهت مشكلة مماثلة من قبل حيث تبين أنها بروير الويب (كروم في حالتي) كانت هذه هي المشكلة.

إذا كنت تستخدم chrome ، فحاول تشغيله:

للنوافذ:

1) قم بإنشاء اختصار لبرنامج Chrome على سطح المكتب. انقر بزر الماوس الأيمن فوق الاختصار واختر "خصائص" ، ثم قم بالتبديل إلى علامة التبويب "اختصار".

2) في الحقل "الهدف" ، قم بإلحاق ما يلي: - المصطلحات - أمان الويب القابل للضبط

لنظام التشغيل Mac ، افتح نافذة طرفية وقم بتشغيلها من سطر الأوامر: open ~/Applications/Google\Chrome.app/ –args –disable-web-security

فوق المعلومات من:

http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/

3
PropertyWebBuilder

واجه فقط مع هذه المشكلة في تطبيق Rails الخاص بي في الإنتاج. أعطتني الكثير من الإجابات هنا تلميحات وساعدتني في الوصول إلى إجابة نجحت في النهاية.

أقوم بتشغيل Nginx وكان الأمر بسيطًا بما يكفي لتعديل my_app.conf file (حيث my_app هو اسم التطبيق الخاص بك). يمكنك العثور على هذا الملف في /etc/nginx/conf.d

إذا لم يكن لديك location / {} بالفعل ، يمكنك فقط إضافته ضمن server {} ، ثم أضف add_header 'Access-Control-Allow-Origin' '*'; ضمن location / {}.

يجب أن يبدو التنسيق النهائي مثل هذا:

server {
    server_name ...;
    listen ...;
    root ...;

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
    }
}
2
H.B