2011-12-05 13 views
5

Tengo una aplicación que utiliza Facebook exclusivamente como proveedor para la autenticación y ha configurado correctamente la devolución de llamada para el modo de producción. Para que esto funcione, proporcione a su aplicación de Facebook una URL de sitio y un dominio de sitio para devoluciones de llamadas, y en mi caso es http://appname.heroku.com y appname.heroku.com, respectivamente.¿Cómo manejar las devoluciones de llamada de OmniAuth en múltiples entornos?

El problema es que mis controladores están configurados para permitir solo sesiones autenticadas, por lo que no puedo ver mi aplicación en modo de desarrollo porque obviamente el dominio de la aplicación de Facebook no se ha establecido en localhost.

¿Cómo puedo evitar esto sin tener que cambiarlo en la configuración de Facebook?

+0

crear otra aplicación de Facebook para el desarrollo con dominio localhost: 3000 –

Respuesta

10

crear otra aplicación de un facebook con el dominio localhost:3000 para el desarrollo y crear config.yml en el directorio config

development: 
    facebook_api_key: 656756786867868 
    facebook_api_secret: 4sdffdh6u345436 

production: 
    facebook_api_key: 45778799 
    facebook_api_secret: fghjkbbcbcbcbcb 

Ahora suma load_config.rb a la carpeta inicializadores

# load config 
AppConfig = YAML.load_file(Rails.root.join('config', 'config.yml')) 

# Override config options by correct environment 
env_options = AppConfig.delete(Rails.env) 

AppConfig.merge!(env_options) unless env_options.nil? 

Y, por último añadir esto a el omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, AppConfig['facebook_api_key'], AppConfig['facebook_api_secret']   
end 

Tomará sus llaves dependiendo del entorno de los rieles. Eso es todo, espero que te ayude.

+0

Una solución bastante obvia. Gracias – Simpleton

+0

Por cierto, el dominio no puede ser localhost: 3000 porque Facebook no lo aceptará. La URL debe ser http: // localhost: 3000 y el dominio es localhost.local con mi archivo de hosts establecido en 127.0.0.1 localhost.local – Simpleton

+1

Tengo un par de aplicaciones de desarrollo con el host 'http: // localhost: 3000 /' y dominio 'localhost'. Todo funciona bien –

10

¿Por qué no crear ENV [] variables en los archivos de entornos y usarlos como este en su inicializador:

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK'] 
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] 

Parece mucho más fácil (y más corto) a mí.

+0

Sí, pero no me gusta esta solución, simplemente no me "limpia" lo suficiente. –

+3

Esto es más seguro que tener sus llaves en un archivo de texto que cargue en el servidor. – iain

+3

Esta es una buena solución para que sus contraseñas no estén almacenadas en el control de versiones. [Heroku] (https://devcenter.heroku.com/articles/config-vars) también lo hace fácil: 'heroku config: add FACEBOOK_KEY = abc123xyz' – Andrew

Cuestiones relacionadas