rails headers expose error control ruby-on-rails angularjs ruby-on-rails-3.2 omniauth

ruby-on-rails - headers - rack cors ruby on rails



No hay ningĂșn encabezado ''Access-Control-Allow-Origin'' presente en el recurso solicitado (8)

Estoy usando omniauth-facebook con AngularJS y CORS no funciona correctamente.

Mi omniauth.rb es

Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook,"xxxxx", "xxxxx", :scope => ''email,user_birthday,read_stream'', :display => ''popup'' end

Todo funciona si lo uso como aplicación y solicitud de rieles. Pero cuando intento llamar ''http: / localhost: 3000 / users / auth / facebook "a través de Angular JS

$http.get(''/users/auth/facebook'').success(function(data, status, headers, config) { console.log("back in success"); }). error(function(data, status, headers, config) { }); }

Veo el siguiente error en la consola JS

XMLHttpRequest no puede cargar https://www.facebook.com/dialog/oauth?client_id=xxxx&display=popup thday% 2Cread_stream & state = 3352c1924bdbc9277f7b1070c38d67acf79b529f198323cb. No hay ningún encabezado ''Access-Control-Allow-Origin'' presente en el recurso solicitado. Por lo tanto, el origen ''http://localhost:3000'' no tiene permitido el acceso.

(La url no se muestra completamente en la consola)

Agregué la siguiente línea

config.middleware.insert_before Warden::Manager, Rack::Cors

pero también esto no funcionó.

¿Cuál es la mejor manera o cómo puedo anular los encabezados de OmniAuth?

Estoy usando Angularjs y gema devise, omniauth-facebook


Dado que se encuentra en su entorno de desarrollo, es posible que desee probar una solución alternativa, al permitir que el navegador se ejecute en un modo no seguro.

Para Chrome en Windows, desde CMD intente:

> cd C:/Program Files (x86)/Google/Chrome/Application > chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

La --disable-web-security le permitirá realizar solicitudes de dominio cruzado. El --user-data-dir le permitirá abrir una nueva sesión solo para desarrollo.

¡Esto es solo una solución para tu trabajo de desarrollo ! ¡No use esto en producción o navegue a otros sitios en esta sesión!


El problema es que Javascript no puede hacer solicitudes de dominio cruzado. Esto se hace por razones de seguridad para que un script no pueda llamar a un servidor remoto y exponer datos confidenciales.

A continuación se muestra un enlace a una explicación muy buena y sencilla con algunas opciones sobre cómo solucionarlo:

http://developer.yahoo.com/javascript/howto-proxy.html

Y aquí hay una respuesta anterior que también tiene buena información:

¿Por qué veo un error de "origen no está permitido por Access-Control-Allow-Origin" aquí?


El problema es que está obteniendo los datos del sitio https secure que es facebook en su sitio, que es http por lo que los últimos navegadores no son compatibles con el origen de permisos cruzados.

La única solución es hacer que su sitio soporte https .


En su ApplicationController.rb añadir

def set_access_control_headers headers[''Access-Control-Allow-Origin''] = ''http://localhost:3000'' end


Establecer ''Access-Control-Allow-Origin'' en el servidor hará que la pista. Me gusta: ruby headers[''Access-Control-Allow-Origin''] = ''*'' En los rieles.


Para CORS tiene que incluir en la lista blanca el dominio al que desea acceder desde la solicitud de origen cruzado en el lado del servidor

headers[''Access-Control-Allow-Origin''] = ''*'' //star will allow all the domain you can specify also which url u want to access

en el lado del cliente, debe configurar el encabezado en config () como

$httpProvider.defaults.xsrfHeaderName = ''X-CSRFToken''; $httpProvider.defaults.headers.common[''X-Requested-With''] = ''XMLHttpRequest'';


Si no tienen el conjunto de encabezados, no puede obligarlos a tener los encabezados. Tal vez debería mirar utilizando JSONP . Sin embargo, la duplicación a través del servidor no sería tan mala, ya que solo tendrá que lidiar con él una vez por visita, y es muy probable que una vez por usuario, ya que muy pocas personas eliminan las cookies.


algunas veces ese problema ocurre debido a browser.IE por defecto permite la solicitud de origen cruzado. En Chrome, deberá agregar un complemento que sea "Allow-Control-Allow-Origin: *" y habilitarlo.