如何在多种环境中处理OmniAuth回调?

时间:2011-12-05 13:21:48

标签: ruby-on-rails ruby facebook omniauth

我有一个应用程序,它只使用Facebook作为身份验证提供程序,并正确设置生产模式的回调。为了实现这一点,您可以为Facebook应用提供站点URL和站点域以进行回调,在我的情况下,它分别为http://appname.heroku.comappname.heroku.com

问题是我的控制器设置为仅允许经过身份验证的会话,因此我无法在开发模式下查看我的应用程序,因为Facebook应用程序的域显然尚未设置为localhost。

如何在不改变Facebook设置的情况下解决这个问题?

2 个答案:

答案 0 :(得分:10)

使用域localhost:3000创建另一个Facebook应用以进行开发和创建 config.yml目录中的config

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

根据导轨环境,它会占用您的钥匙。这就是全部,希望它可以帮到你。

答案 1 :(得分:10)

为什么不在环境文件中创建ENV []变量,并在初始化程序中使用它们:

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

对我来说似乎更容易(也更短)。