Autoriser tout via la politique de la SCRO

Comment puis-je désactiver les cors? Pour une raison quelconque, je fis fi des origines permises et des en-têtes, mais mes demandes d’ajax continuent de me plaindre que l’origine n’était pas autorisée par ma politique CORS ….

Mon contrôleur d’applications:

class ApplicationController  '', :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 

itinéraires:

  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" 

Modifier—

J’ai aussi essayé:

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

dans application.rb

–edit 2 —

Le problème est que les extensions Chrome ne supportent pas CORS, je pense. Comment puis-je récupérer des informations en contournant CORS? Comment dois-je répondre au contrôle en amont?

J’ai les mêmes exigences sur une API publique pour laquelle j’ai utilisé rails-api.

J’ai également défini l’en-tête dans un filtre avant. Cela ressemble à ceci:

 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' 

Il semble que vous ayez manqué l’en-tête Access-Control-Request-Method.

Jetez un coup d’œil au middleware rack-cors . Il va gérer les en-têtes CORS de manière configurable.

J’ai eu des problèmes, surtout avec Chrome. Ce que vous avez fait ressemble essentiellement à ce que j’ai fait dans mon application. La seule différence est que je réponds avec un nom d’hôte correct dans mes en-têtes Origin CORS et non un caractère générique. Il me semble que Chrome est pointilleux avec ça.

Changer entre développement et production est pénible, alors j’ai écrit cette petite fonction qui m’aide en mode développement et en mode production. Toutes les choses suivantes se produisent dans mon application_controller.rb sauf indication contraire, ce n’est peut-être pas la meilleure solution, mais les rack ne fonctionnaient pas non plus pour moi, je ne me souviens pas pourquoi.

 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 

Et puis j’ai cette petite chose dans mon application_controller.rb car mon site nécessite un login:

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

Dans mes routes.rb j’ai aussi cette chose:

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

et cette méthode ressemble à ceci:

 def empty render :nothing => true end 

Simplement, vous pouvez append gem rack-cors https://rubygems.org/gems/rack-cors/versions/0.4.0

1ère étape: append une gemme à votre Gemfile:

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

puis enregistrez et exécutez l’ bundle install

2ème étape: mettez à jour votre fichier config / application.rb en ajoutant ceci:

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

pour plus de détails, vous pouvez aller sur https://github.com/cyu/rack-cors Specailly si vous n’utilisez pas de rails 5.

J’ai eu un problème similaire avant où il s’est avéré être le navigateur Web (chrome dans mon cas) qui était le problème.

Si vous utilisez chrome, essayez de le lancer pour:

Pour les fenêtres:

1) Créez un raccourci vers Chrome sur votre bureau. Cliquez avec le bouton droit sur le raccourci et choisissez Propriétés, puis passez à l’onglet «Raccourci».

2) Dans le champ «Cible», ajoutez les éléments suivants: –args –disable-web-security

Pour Mac, ouvrez une fenêtre de terminal et exécutez-la depuis la ligne de commande: open ~ / Applications / Google \ Chrome.app/ –args –disable-web-security

Informations ci-dessus à partir de:

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

Essayez la configuration à /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