我正在使用omniauth和devise,以允许通过我的应用程序中的Facebook登录。

我的devise.rb文件具有以下行

config.omniauth :facebook, 'MY_DEV_APP_ID', 'MY_DEV_APP_SECRET'

我在Facebook上有2个应用,一个指向我的实时URL,另一个指向我的开发URL。

如何在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

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

最佳答案

我的方法是将它们存储在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"

然后在我的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']

作为一种好习惯,您可能不应该将生产API key 存储在版本控制中的该文件中。您应该将其存储在服务器上,并在您的部署脚本中进行符号链接(symbolic link),就像database.yml一样

关于ruby-on-rails - 带有omniauth的设备-为开发和生产设置单独的配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11618680/

10-15 13:48