Comment puis-je désactiver les cors? Pour une raison quelconque, j'ai joker les origines et les en-têtes autorisés, mais mes demandes ajax se plaignent toujours que l'origine n'était 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
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"
Éditer---
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 peuvent ne pas prendre en charge CORS, je pense. Comment puis-je récupérer des informations en contournant CORS? Comment dois-je répondre à la vérification avant vol?
ruby-on-rails
cors
Non-conformiste
la source
la source
Réponses:
J'ai vos 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:
Il semble que vous ayez manqué l'en-tête Access-Control-Request-Method.
la source
Jetez un œil au middleware rack-cors . Il gérera les en-têtes CORS de manière configurable.
la source
Vous pouvez simplement ajouter des gemmes rack-cors https://rubygems.org/gems/rack-cors/versions/0.4.0
1ère étape: ajoutez une gemme à votre Gemfile:
puis enregistrez et exécutez
bundle install
2ème étape: mettez à jour votre fichier config / application.rb en ajoutant ceci:
pour plus de détails, vous pouvez aller sur https://github.com/cyu/rack-cors Specailly si vous n'utilisez pas de rails 5.
la source
.insert_before 0
c'était important. Avant, j'utilisaisconfig.middleware.use
et cela ne fonctionnait que jusqu'à ce que je souhaite autoriser CORS pour monpublic
répertoire.J'ai eu des problèmes, en particulier avec Chrome également. Ce que vous avez fait ressemble essentiellement à ce que j'ai fait dans ma candidature. 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 difficile avec cela.
Basculer entre le développement et la production est pénible, j'ai donc écrit cette petite fonction qui m'aide en mode développement et aussi 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 cors de rack ne fonctionnaient pas non plus pour moi, je ne me souviens pas pourquoi.Et puis j'ai ce petit truc dans mon
application_controller.rb
car mon site nécessite un login:Dans mon
routes.rb
j'ai aussi cette chose:et cette méthode ressemble à ceci:
la source
J'ai déjà eu un problème similaire où il s'est avéré que c'était le navigateur Web (chrome dans mon cas) qui était le problème.
Si vous utilisez Chrome, essayez de le lancer ainsi:
Pour les fenêtres:
1) Créez un raccourci vers Chrome sur votre bureau. Faites un clic droit 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-la à partir de la ligne de commande: ouvrez ~ / Applications / Google \ Chrome.app/ –args –disable-web-security
Ci-dessus les informations de:
http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/
la source
Je viens de rencontrer ce problème dans mon application rails en production. Beaucoup de réponses ici m'ont donné des indices et m'ont aidé à finalement arriver à une réponse qui a bien fonctionné pour moi.
J'utilise Nginx et c'était assez simple de simplement modifier le fichier my_app.conf (où my_app est le nom de votre application). Vous pouvez trouver ce fichier dans
/etc/nginx/conf.d
Si vous ne l'avez pas
location / {}
déjà, vous pouvez simplement l'ajouter sousserver {}
, puis ajouteradd_header 'Access-Control-Allow-Origin' '*';
souslocation / {}
.Le format final devrait ressembler à ceci:
la source
Essayez la configuration sur /config/application.rb:
la source