111 votes

Autoriser tout par la politique CORS

Comment puis-je désactiver les cors ? Pour une raison ou une autre, j'ai modifié les origines et les en-têtes autorisés, mais mes requêtes ajax se plaignent toujours que l'origine n'est pas autorisée par ma politique CORS.....

Mon contrôleur d'applications :

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

routes :

  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---

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 de Chrome ne prennent pas en charge CORS, je pense. Comment puis-je récupérer des informations en contournant CORS ? Comment dois-je répondre à la vérification préalable ?

3voto

klavado Points 93

J'ai déjà eu un problème similaire et il s'est avéré que c'était le navigateur web (chrome dans mon cas) qui était en cause.

Si vous utilisez chrome, essayez de le lancer ainsi :

Pour Windows :

1) Créez un raccourci vers Chrome sur votre bureau. Cliquez avec le bouton droit de la souris sur le raccourci et choisissez Propriétés, puis passez à l'onglet "Raccourci".

2) Dans le champ "Cible", ajoutez ce qui suit : -args -disable-web-security

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

Les informations ci-dessus proviennent de :

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

2voto

H.B Points 65

Je viens de rencontrer ce problème dans mon application rails en production. De nombreuses réponses ici m'ont donné des conseils et m'ont aidé à trouver une solution qui a bien fonctionné pour moi.

J'utilise Nginx et il m'a suffi de modifier l'adresse de l'utilisateur. mon_app.conf (où ma_app est le nom de votre application). Vous pouvez trouver ce fichier dans /etc/nginx/conf.d

Si vous n'avez pas location / {} vous pouvez déjà l'ajouter sous server {} puis ajoutez add_header 'Access-Control-Allow-Origin' '*'; sous location / {} .

Le format final devrait ressembler à ceci :

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

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
    }
}

-1voto

Leonardo Ostan Points 160

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

-4voto

Ayo crescent Points 1

Utilisez VSC ou tout autre éditeur qui dispose d'un serveur Live, il vous donnera un proxy qui vous permettra d'utiliser GET ou FETCH.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X