设计omniauth - 为开发和生产设置单独的配置

Fin*_*nnn 5 ruby-on-rails production-environment devise omniauth ruby-on-rails-3

我正在使用omniauth,设计,允许在我的应用程序中通过Facebook登录.

我的devise.rb文件有以下行

config.omniauth :facebook, 'MY_DEV_APP_ID', 'MY_DEV_APP_SECRET' 
Run Code Online (Sandbox Code Playgroud)

我在Facebook上有2个应用程序,一个指向我的实时网址,另一个指向我的开发网址.

如何在devise rb文件中添加两个单独的omniauth配置?

就像是 -

if ENV['RAILS_ENV'] = "production"
    config.omniauth :facebook, 'MY_LIVE_APP_ID', 'MY_LIVE_APP_SECRET'  
else
    config.omniauth :facebook, 'MY_DEV_APP_ID', 'MY_DEV_APP_SECRET' 
end
Run Code Online (Sandbox Code Playgroud)

更重要的是,我应该将它放在devise.tb文件中还是应该分成我的production.rb和devleopment.rb文件?如果是这样,我如何在我的devise.rb文件中引用它?

Gaz*_*ler 11

我的方法是将它们存储在yaml文件中.我叫我的config/api_keys.yml

defaults: &defaults
  twitter:
    api_key: "KEY"
    api_secret: "SECRET"
  facebook:
    api_key: "KEY"
    api_secret: "SECRET"

development:
  <<: *defaults

test:
  <<: *defaults

production:
  twitter:
    api_key: "KEY2"
    api_secret: "SECRET2"
  facebook:
    api_key: "KEY2"
    api_secret: "SECRET2"
Run Code Online (Sandbox Code Playgroud)

然后在我的devise.rb文件中我做:

API_KEYS = YAML::load_file("#{Rails.root}/config/api_keys.yml")[Rails.env]
config.omniauth :facebook , API_KEYS['facebook']['api_key'], API_KEYS['facebook']['api_secret']
config.omniauth :twitter , API_KEYS['twitter']['api_key'], API_KEYS['twitter']['api_secret']
Run Code Online (Sandbox Code Playgroud)

作为一种好的做法,您可能不应该在版本控制中将生产API密钥存储在此文件中.您应该将它存储在服务器上,并在部署脚本中将其符号链接,就像您一样database.yml