2011-12-05 47 views
5

我有一個應用程序使用Facebook專門作爲提供者進行身份驗證,並正確設置了生產模式的回調。爲了這個工作,你提供你的Facebook應用程序一個網站的URL和一個網站域的回調,在我的情況下,它分別是http://appname.heroku.comappname.heroku.com如何在多個環境中處理OmniAuth回調?

問題是我的控制器設置爲只允許通過身份驗證的會話,所以我無法在開發模式下查看我的應用程序,因爲Facebook應用程序的域顯然沒有設置爲本地主機。

如何解決此問題而無需在Facebook的設置中更改它?

+0

創建另一個Facebook的應用程序開發與域本地主機:3000 –

回答

10

與域localhost:3000再創建一個Facebook應用程序開發和在config目錄中創建 config.yml

development: 
    facebook_api_key: 656756786867868 
    facebook_api_secret: 4sdffdh6u345436 

production: 
    facebook_api_key: 45778799 
    facebook_api_secret: fghjkbbcbcbcbcb 

現在添加load_config.rb到初始化文件夾

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

最後加上這omniauth.rb

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

它將採取您的鑰匙取決於鐵路的環境。就是這樣,希望它能幫助你。

+0

相當明顯的解決方案。謝謝 – Simpleton

+0

順便說一下,域名不能爲localhost:3000,因爲Facebook不會接受。 URL應該是http:// localhost:3000,域名是localhost.local,我的hosts文件設置爲127.0.0.1 localhost.local – Simpleton

+1

我有幾個開發應用程序,主機爲'http:// localhost:3000 /',域名'localhost'。所有的作品都很好 –

10

爲什麼不直接創造的環境文件ENV []變量,並在您初始化使用它們像這樣:

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

似乎更容易(短)給我。

+0

是的,但我不喜歡這個解決方案,它對我來說不夠「清潔」。 –

+3

這比將您的密鑰放入上傳到服務器的文本文件更安全。 – iain

+3

這是一個很好的解決方案,因此您的密碼不會存儲在版本控制中。 [Heroku](https://devcenter.heroku.com/articles/config-vars)使得這一點變得簡單:'heroku config:add FACEBOOK_KEY = abc123xyz' – Andrew