সিওআরএস নীতিমালার মাধ্যমে যেকোন কিছুকে অনুমতি দিন


102

আমি কীভাবে কর্স অক্ষম করতে পারি? কিছু কারণে আমি অনুমতিপ্রাপ্ত উত্স এবং শিরোলেখগুলিকে ওয়াইল্ড করেছিলাম তবুও আমার এজাক্স অনুরোধগুলি এখনও অভিযোগ করে যে আমার সিওআরএস নীতি দ্বারা উত্সটির অনুমতি দেওয়া হয়নি ....

আমার অ্যাপ্লিকেশন নিয়ামক:

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

in application.rb

--edit 2 ---

সমস্যাটি হ'ল ক্রোম এক্সটেনশনগুলি আমার মনে হয় যে CORS সমর্থন করে না। আমি কীভাবে সিওআরএসকে বাইপাস করে তথ্য আনতে পারি? প্রিফ্লাইট চেকটিতে আমার কীভাবে প্রতিক্রিয়া জানানো উচিত?


4
"সিওআরএস অক্ষম করুন" না তবে কার্যকরভাবে কোনও নীতি নেই? আমি কোনও অনুরোধের প্রতিক্রিয়া বলে মনে হচ্ছে না।
ননকনফর্মিস্ট

4
আপনি কি এটি লোকালহোস্টে ব্যবহার করেন?
জাজং নগুইন

উত্তর:


155

আমি আপনার সর্বজনীন 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'

দেখে মনে হচ্ছে আপনি অ্যাক্সেস-নিয়ন্ত্রণ-অনুরোধ-পদ্ধতির শিরোনামটি মিস করেছেন।


এটা অদ্ভুত. আপনি যে ত্রুটি পেয়েছেন সে সম্পর্কে আরও তথ্য সরবরাহ করতে পারেন?
মাত্তেও

github.com/cleor41/Cors- রেইলস 4- এপিআই এটি কোথায় রাখবেন তা আপনি যদি জানেন না তবে এটি পরীক্ষা করে দেখুন।
ক্লিওর

8
অ্যাক্সেস-নিয়ন্ত্রণ-অনুরোধ-পদ্ধতিটি প্রতিক্রিয়া হিসাবে নয় অনুরোধে সেট করা হয়েছে। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

19

কটাক্ষপাত আছে আলনা-Cors মিডলওয়্যার। এটি একটি কনফিগারযোগ্য পদ্ধতিতে CORS শিরোনামগুলি পরিচালনা করবে।


4
আমরা কয়েক মাস ধরে র্যাক-কর্স ব্যবহার করেছি এবং এখনও পর্যন্ত কোনও সমস্যা ছাপিয়েছি না। আপনি কি নিশ্চিত যে সমস্যাটি ক্লায়েন্টের পাশে থাকবে না?
জেফ

4
আমি মনে করি সমস্যাটি হ'ল ক্রোম এক্সটেনশানগুলি কর্স সমর্থন করে না তাই সম্ভবত অরিজিন নাল। আমি কীভাবে সিওআরএসকে সম্পূর্ণভাবে অক্ষম করতে পারি এবং নাল উত্স সম্পর্কিত অনুরোধগুলি সহ যে কোনও অনুরোধের প্রতিক্রিয়া জানাতে পারি?
ননকনফর্মিস্ট

আপনি কি ক্রোম এক্সটেনশন ব্যবহার করছেন?
জেফ

4
আমি একটি ক্রোম এক্সটেনশন লিখছি যা আমার রেল ব্যাকএন্ডের সাথে যোগাযোগ করা দরকার।
ননকনফর্মিস্ট

12

কেবলমাত্র আপনি র্যাক-কর্স মণিটি https://rubygems.org/gems/rack-cors/versions/0.4.0 যোগ করতে পারেন

প্রথম পদক্ষেপ: আপনার রত্নখচিত্রে রত্ন যুক্ত করুন:

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

এবং তারপরে সেভ করে রান করুন bundle install

২ য় পদক্ষেপ: এটি যুক্ত করে আপনার কনফিগারেশন / অ্যাপ্লিকেশন.আরবি ফাইলটি আপডেট করুন:

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 যেতে পারেন বিশেষত আপনি যদি রেল 5 ব্যবহার না করেন।


আমার জন্য .insert_before 0ছিল গুরুত্বপূর্ণ। আমি ব্যবহার করার আগে config.middleware.useএবং এটি কেবলমাত্র আমার publicডিরেক্টরিতে সিওআরএসের অনুমতি না দেওয়ার আগে পর্যন্ত কাজ করে ।
সুনামিস

5

আমার সমস্যা ছিল, বিশেষত ক্রোমের সাথেও। আপনি যা করেছেন তা মূলত আমার অ্যাপ্লিকেশনটিতে যা করেছে তার মতো দেখাচ্ছে। পার্থক্যটি হ'ল আমি আমার ওরিজিন সিওআরএস শিরোলেখগুলিতে সঠিক হোস্টনামের সাথে প্রতিক্রিয়া জানাচ্ছি, ওয়াইল্ডকার্ড নয়। আমার কাছে মনে হয় ক্রোম এটির সাথে পিক।

বিকাশ এবং উত্পাদন মধ্যে স্যুইচিং একটি ব্যথা, তাই আমি এই সামান্য ফাংশনটি লিখেছিলাম যা আমাকে উন্নয়ন মোডে এবং উত্পাদন মোডে সহায়তা করে। নিম্নলিখিত বিষয়গুলি সমস্তই আমার মধ্যে ঘটে যদি application_controller.rbনা অন্যথায় উল্লেখ করা হয়, এটি সর্বোত্তম সমাধান হতে পারে না, তবে র্যাক-কোরগুলি আমার পক্ষেও কার্যকর হয়নি, কেন তা আমি মনে করতে পারি না।

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

4
কেবল বৃত্তটি বন্ধ করতে। এই সম্পূর্ণ CORS জগাখিটি কেবল তখনই ঘটে যখন আপনি লোকালহোস্ট অ্যাপ্লিকেশন থেকে আপনার প্রযোজনার ব্যাক-এন্ড হিট করছেন, তাই না? সবকিছুই যখন প্রযোজনায় থাকে তখন কি এসব ঘটবে না?
সেবাস্তিয়ালসনো

4
কেবলমাত্র যদি ব্যাকএন্ড এবং ওয়েব অ্যাপ্লিকেশন একই URL এর আওতায় হোস্ট করা হয়। যদি তারা দুটি পৃথক পৃথক ইউআরএল সম্পূর্ণরূপে হোস্ট করা হয়, তবে এটি উত্পাদন ক্ষেত্রেও ঘটবে।
ক্রিস্টোফ আইক্ক

3

এটির আগে ওয়েব ব্রাউন (আমার ক্ষেত্রে ক্রোম) হয়ে ওঠার আগে আমারও একই সমস্যা ছিল।

আপনি যদি ক্রোম ব্যবহার করে থাকেন তবে এটি চালু করার চেষ্টা করুন:

উইন্ডোজ জন্য:

1) আপনার ডেস্কটপে ক্রোমের শর্টকাট তৈরি করুন। শর্টকাটে ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলি নির্বাচন করুন, তারপরে "শর্টকাট" ট্যাবে স্যুইচ করুন।

2) "লক্ষ্য" ক্ষেত্রে, নিম্নলিখিতগুলি সংযোজন করুন: gsআর্গস-ডিসাইজেবল-ওয়েব-সুরক্ষা

ম্যাকের জন্য, একটি টার্মিনাল উইন্ডোটি খুলুন এবং কমান্ড-লাইন থেকে এটি চালান: খুলুন ~ / অ্যাপ্লিকেশনগুলি / গুগল \ ক্রোম.অ্যাপ / –আর্গস-অক্ষম-ওয়েব-সুরক্ষা

উপরের তথ্য থেকে:

http://docamentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-de વિકાસment/


কেন এটিকে ভোট দেওয়া হয়েছে? আমার ওয়েব সাইটের সুরক্ষা অক্ষম করে ক্রোম চালিয়ে সমাধান করা প্রশ্নে বর্ণিতটির মতো পরিস্থিতি রয়েছে। আপনি যখন স্থানীয়ভাবে ডেভলপমেন্ট সার্ভার চালাচ্ছেন তখন সমস্যাটি দেখা দেয়। স্পষ্টতই আপনি ওয়েব সুরক্ষার সাথে ক্রোম চালানো সবসময় অক্ষম করবেন না।
প্রপার্টি

তিনি পরিস্থিতিটি সঠিকভাবে ব্যাখ্যা করার কারণে এটি ভোট দেওয়া উচিত নয় :)
জাজুন নগুইন

4
আমি ভোট-ডাউন করিনি, তবে উত্তর থেকে এটি কেবলমাত্র উন্নয়নমূলক উদ্দেশ্যে সমাধান সমাধান করা যায় না। যদিও এটি স্থানীয়ভাবে সমস্যার সমাধান করতে পারে, আপনার ওয়েব ভিজিটর / এক্সটেনশন ব্যবহারকারীরা এটি করার আশা করতে পারে না। সুতরাং আমি উত্তরে তা স্পষ্ট করে বলব।
নাথানভদা

4
এখানে কোনও ভোট-ডাউন নেই, তবে এটি ব্যবহার করা হতো যে প্রদত্ত পতাকা দিয়ে ক্রোম চালানোর প্রথম ঘটনাটি অন্যান্য সমস্ত ঘটনা একইভাবে চালিত করে caused কিছু খুব সতর্ক হতে হবে। এটি ভুলে যাওয়া এবং কিছু অপ্রয়োজনীয় সার্ফিং করা খুব সহজ।
ডিসি 5

2

উত্পাদনে আমার রেল অ্যাপ্লিকেশনটিতে এই সমস্যার মুখোমুখি হয়েছে। এখানে প্রচুর উত্তর আমাকে ইঙ্গিত দিয়েছে এবং অবশেষে এমন উত্তর আসতে সাহায্য করেছিল যা আমার পক্ষে ভাল কাজ করেছে।

আমি এনগিনেক্স চালাচ্ছি এবং এটি কেবলমাত্র my_app.conf ফাইলটি সংশোধন করার পক্ষে যথেষ্ট সহজ ছিল (যেখানে আমার_্যাপটি আপনার অ্যাপ্লিকেশন নাম)। আপনি এই ফাইলটি খুঁজে পেতে পারেন/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

/Config/application.rb এ কনফিগারেশন ব্যবহার করে দেখুন:

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

আপনি গেমফিলের মধ্যে 'র্যাক-কর্স' যুক্ত করা উচিত বলে উল্লেখ করতে ভুলে গিয়েছিলেন
গ্যাব্রিয়েল লিডেনর

-2

লাইভ সার্ভার রয়েছে এমন ভিএসসি বা অন্য কোনও সম্পাদক ব্যবহার করুন, এটি আপনাকে এমন একটি প্রক্সি দেবে যা আপনাকে জিইটি বা ফিট ব্যবহারের অনুমতি দেবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.