2011-12-05 2 views
5

Ho un'app che utilizza esclusivamente Facebook come provider per l'autenticazione e ha impostato correttamente il callback per la modalità di produzione. Per fare in modo che funzioni, fornisci all'app Facebook un URL del sito e un dominio del sito per i callback e nel mio caso sono rispettivamente http://appname.heroku.com e appname.heroku.com.Come gestire i callback OmniAuth in più ambienti?

Il problema è che i miei controller sono impostati per consentire solo sessioni autenticate, quindi non posso visualizzare la mia app in modalità sviluppo perché il dominio dell'app Facebook ovviamente non è stato impostato su localhost.

Come aggirare questo senza doverlo modificare nelle impostazioni di Facebook?

+0

creare un'altra app di Facebook per lo sviluppo con domain localhost: 3000 –

risposta

10

Creare un'altra applicazione un facebook con il dominio localhost:3000 per lo sviluppo e creare config.yml nella directory config

development: 
    facebook_api_key: 656756786867868 
    facebook_api_secret: 4sdffdh6u345436 

production: 
    facebook_api_key: 45778799 
    facebook_api_secret: fghjkbbcbcbcbcb 

Ora aggiungere load_config.rb alla cartella inizializzatori

# 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? 

E infine aggiungere questo a the omniauth.rb

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

Richiede le chiavi in ​​base all'ambiente delle guide. Questo è tutto, spero che ti aiuti.

+0

Una soluzione abbastanza ovvia. Grazie – Simpleton

+0

A proposito, il dominio non può essere localhost: 3000 perché Facebook non lo accetterà. L'URL deve essere http: // localhost: 3000 e il dominio è localhost.local con il file hosts impostato su 127.0.0.1 localhost.local – Simpleton

+1

Ho un paio di app di sviluppo con host 'http: // localhost: 3000 /' e dominio 'localhost'. Tutto funziona bene –

10

Perché non solo creare ENV [] variabili nei file ambienti e li utilizzano come questo nel tuo initializer:

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

Sembra molto più facile (e più breve) a me.

+0

Sì, ma non mi piace questa soluzione, semplicemente non 'pulisce' abbastanza per me. –

+3

Questo è più sicuro che avere le chiavi in ​​un file di testo che si carica sul server. – iain

+3

Questa è una bella soluzione in modo che le password non siano memorizzate nel controllo di versione. [Heroku] (https://devcenter.heroku.com/articles/config-vars) rende anche questo semplice: 'heroku config: aggiungi FACEBOOK_KEY = abc123xyz' – Andrew