Como posso desativar cors? Por algum motivo, alterei as origens e cabeçalhos permitidos, mas minhas solicitações de ajax ainda reclamam que a origem não foi permitida pela minha política CORS ....
Meu controlador de aplicativos:
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
rotas:
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"
Editar---
Eu também tentei:
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options]
end
end
em application.rb
--editar 2 ---
O problema é que as extensões do Chrome podem não suportar CORS, eu acho. Como posso obter informações ignorando o CORS? Como devo responder à verificação do preflight?
ruby-on-rails
cors
Dissidente
fonte
fonte
Respostas:
Eu tenho os mesmos requisitos em uma API pública para a qual usei rails-api.
Também defini o cabeçalho em um filtro anterior. Se parece com isso:
Parece que você perdeu o cabeçalho Access-Control-Request-Method.
fonte
Dê uma olhada no middleware rack-cors . Ele tratará os cabeçalhos CORS de uma maneira configurável.
fonte
Simplesmente você pode adicionar rack-cors gem https://rubygems.org/gems/rack-cors/versions/0.4.0
1ª Etapa: adicionar gema ao seu Gemfile:
e então salvar e executar
bundle install
2ª etapa: atualize seu arquivo config / application.rb adicionando este:
para mais detalhes você pode ir para https://github.com/cyu/rack-cors Specailly se você não usa rails 5.
fonte
.insert_before 0
foi importante. Antes eu usavaconfig.middleware.use
e funcionava apenas até eu querer permitir CORS para meupublic
diretório.Eu tive problemas, especialmente com o Chrome também. O que você fez parece essencialmente com o que fiz em meu aplicativo. A única diferença é que estou respondendo com nomes de host corretos nos cabeçalhos do Origin CORS e não com um caractere curinga. Parece-me que o Chrome é exigente com isso.
Alternar entre desenvolvimento e produção é uma dor, então escrevi esta pequena função que me ajuda no modo de desenvolvimento e também no modo de produção. Todas as coisas a seguir acontecem no meu, a
application_controller.rb
menos que indicado de outra forma, pode não ser a melhor solução, mas rack-cors não funcionou para mim também, não consigo me lembrar por quê.E então eu tenho uma pequena coisa no meu
application_controller.rb
porque meu site requer um login:No meu
routes.rb
também tenho essa coisa:e este método se parece com este:
fonte
Eu tive um problema semelhante antes em que acabou sendo o navegador da web (cromo no meu caso) que era o problema.
Se você estiver usando o Chrome, tente iniciá-lo para:
Para Windows:
1) Crie um atalho para o Chrome em sua área de trabalho. Clique com o botão direito do mouse no atalho e escolha Propriedades, a seguir mude para a guia “Atalho”.
2) No campo “Destino”, acrescente o seguinte: –args –disable-web-security
Para Mac, abra uma janela de terminal e execute-a na linha de comando: open ~ / Applications / Google \ Chrome.app/ –args –disable-web-security
Informações acima de:
http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/
fonte
Acabei de encontrar esse problema em meu aplicativo Rails em produção. Muitas respostas aqui me deram dicas e me ajudaram a finalmente chegar a uma resposta que funcionou bem para mim.
Estou executando o Nginx e foi simples o suficiente apenas modificar o arquivo my_app.conf (onde my_app é o nome do seu aplicativo). Você pode encontrar este arquivo em
/etc/nginx/conf.d
Se ainda não o fez,
location / {}
pode apenas adicioná-lo em eserver {}
, em seguida, adicionaradd_header 'Access-Control-Allow-Origin' '*';
emlocation / {}
.O formato final deve ser semelhante a este:
fonte
Tente a configuração em /config/application.rb:
fonte