ruby on rails - السماح لأي شيء من خلال سياسة CORS



ruby-on-rails (4)

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

كيف يمكنني تعطيل كورس؟ لسبب ما ، قمت بتمرير أصل الأشياء المسموح بها والعناوين المسموح بها ، ومع ذلك لا تزال طلبات الحصول على رقم آجائي تشكو من أن أصلها غير مسموح به من خلال سياسة 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؟ كيف يجب أن أرد على فحص الاختبار المبدئي؟


ببساطة يمكنك إضافة أحجار الجرف 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

لمزيد من التفاصيل ، يمكنك الانتقال إلى rack-cors تحديدًا إذا كنت لا تستخدم القضبان 5.


لديّ نفس متطلباتك في واجهة برمجة التطبيقات العامة التي استخدمت فيها 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'

يبدو أنك فاتتك عنوان Access-Control-Request-Method.


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

إذا كنت تستخدم chrome ، فجرّب تشغيله على النحو التالي:

للنوافذ:

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

2) في حقل "الهدف" ، قم بإلحاق ما يلي: - args –disable-web-security

بالنسبة لنظام التشغيل 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/





cors