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

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

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

如何解决这个问题而不必在Facebook的设置中更改它?

使用domain 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添加到initializers文件夹

 # 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 

它将取决于rails环境。 这就是全部,希望它对你有所帮助。

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

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

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