Je voulais implémenter CORS dans mon application Rails, alors j'ai cherché rack-cors gem dans Google. Et j'ai tout fait comme cela a été dit dans le fichier README, c'est-à-dire que Gemfile a été mis à jour en conséquence et mis à jour application.rb
comme ceci:
module YourApp
class Application < Rails::Application
# ...
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
end
end
Mais ça n'a pas marché. Peu importe ce que je faisais, je continuais à recevoir un message dans la console du navigateur:XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.
Après avoir lu blogpost et issue sur github, je me suis rendu compte que la position du middleware rack-cors dans la pile de middleware importait peut-être. J'ai donc fait ce qui était dit dans le numéro de github:
module YourApp
class Application < Rails::Application
# ...
config.middleware.insert 0, Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
end
end
Après cela, quand je lance rake middleware
, rack-cors est vraiment au sommet de la pile.
Mais cela ne fonctionne tout simplement toujours pas. Je continue à avoir la même erreur. N'importe qui, aidez s'il vous plaît.
J'ai rencontré le même problème avec Heroku. J'ai trouvé ce blog avec le même problème de rack-cors.
Vient de déplacer le use Rack::Cors
à config.ru
, redéployé sur heroku et cela fonctionne.
require ::File.expand_path('../config/environment', __FILE__)
run Rails.application
require 'rack/cors'
use Rack::Cors do
# allow all origins in development
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options]
end
end
Il y a un nouveau numéro fil pour la solution heroku
À la place d'utiliser
config.middleware.use Rack::Cors do
essayer
config.middleware.insert_before ActionDispatch::Static, Rack::Cors do
Cela a fonctionné pour moi.
Je devais créer un itinéraire spécial pour gérer les demandes d’options, cors gem ne l’a pas fait pour moi comme je l’attendais. L'itinéraire ajouté à la fin de routes.rb était:
match "*path", :to => proc {|env| [200, {
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Request-Method' => '*',
'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
'Content-Type' => 'text/plain'
}, ["CORS Preflight"]] }, :via => [:options]
Après tout, il est apparu que ce joyau a quelques problèmes avec heroku, sur la machine locale, il fonctionne parfaitement bien.
Assurez-vous que vous avez ajouté ou non commentaire gem 'rack-cors'
dans le fichier Gemfile.