¿Cómo puedo desactivar cors? Por alguna razón, modifiqué los orígenes y encabezados permitidos, pero mis solicitudes de ajax todavía se quejan de que mi política CORS no permitía el origen ...
Mi controlador de aplicaciones:
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
rutas:
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---
También probé:
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options]
end
end
en application.rb
--editar 2 ---
El problema es que las extensiones de Chrome pueden no ser compatibles con CORS, creo. ¿Cómo puedo obtener información sin pasar por CORS? ¿Cómo debo responder a la verificación previa al vuelo?
ruby-on-rails
cors
Inconformista
fuente
fuente
Respuestas:
Tengo sus mismos requisitos en una API pública para la que usé rails-api.
También configuré el encabezado en un filtro anterior. Se parece a esto:
Parece que se perdió el encabezado Access-Control-Request-Method.
fuente
Eche un vistazo al middleware rack-cors . Manejará los encabezados CORS de una manera configurable.
fuente
Simplemente puede agregar la gema rack-cors https://rubygems.org/gems/rack-cors/versions/0.4.0
Primer paso: agregue gema a su Gemfile:
y luego guardar y ejecutar
bundle install
2do paso: actualice su archivo config / application.rb agregando esto:
para obtener más detalles, puede ir a https://github.com/cyu/rack-cors Specailly si no usa rieles 5.
fuente
.insert_before 0
fue importante. Antes lo usabaconfig.middleware.use
y eso funcionó solo hasta que quise permitir CORS para mipublic
directorio.Tuve problemas, especialmente con Chrome también. Lo que hiciste se parece esencialmente a lo que hice en mi solicitud. La única diferencia es que estoy respondiendo con un nombre de host correcto en mis encabezados CORS de Origin y no con un comodín. Me parece que Chrome es quisquilloso con esto.
Cambiar entre desarrollo y producción es una molestia, así que escribí esta pequeña función que me ayuda en el modo de desarrollo y también en el modo de producción. Todas las siguientes cosas suceden en mi, a
application_controller.rb
menos que se indique lo contrario, puede que no sea la mejor solución, pero los rack-cors tampoco funcionaron para mí, no recuerdo por qué.Y luego tengo esta pequeña cosa en mi
application_controller.rb
porque mi sitio requiere un inicio de sesión:En mi
routes.rb
también tengo esta cosa:y este método se ve así:
fuente
He tenido un problema similar antes en el que resultó ser el navegador web (Chrome en mi caso) el problema.
Si está utilizando Chrome, intente iniciarlo así:
Para ventanas:
1) Cree un acceso directo a Chrome en su escritorio. Haga clic derecho en el acceso directo y seleccione Propiedades, luego cambie a la pestaña "Acceso directo".
2) En el campo "Destino", agregue lo siguiente: –args –disable-web-security
Para Mac, abra una ventana de terminal y ejecute esto desde la línea de comandos: abra ~ / Applications / Google \ Chrome.app/ –args –disable-web-security
Información anterior de:
http://documentumcookbook.wordpress.com/2012/03/13/disable-cross-domain-javascript-security-in-chrome-for-development/
fuente
Acabo de encontrar este problema en mi aplicación de rieles en producción. Muchas de las respuestas aquí me dieron pistas y me ayudaron a finalmente llegar a una respuesta que funcionó bien para mí.
Estoy ejecutando Nginx y fue lo suficientemente simple como para modificar el archivo my_app.conf (donde my_app es el nombre de su aplicación). Puede encontrar este archivo en
/etc/nginx/conf.d
Si aún no lo ha
location / {}
hecho, puede agregarlo debajoserver {}
y luego agregaradd_header 'Access-Control-Allow-Origin' '*';
debajolocation / {}
.El formato final debería verse así:
fuente
Pruebe la configuración en /config/application.rb:
fuente