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

Sim*_*ton 5 ruby facebook ruby-on-rails omniauth

我有一个应用程序,它独家使用Facebook作为身份验证提供程序,并正确设置生产模式的回调.为了这个工作,你提供一个网站的URL和回调网站域名您的Facebook应用程序,并在我的情况下,它http://appname.heroku.comappname.heroku.com分别.

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

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

Mik*_*kin 10

使用域创建另一个Facebook应用程序以localhost:3000进行开发并config.ymlconfig目录中创建

development:
  facebook_api_key: 656756786867868
  facebook_api_secret: 4sdffdh6u345436

production:
  facebook_api_key: 45778799
  facebook_api_secret: fghjkbbcbcbcbcb
Run Code Online (Sandbox Code Playgroud)

现在将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?
Run Code Online (Sandbox Code Playgroud)

最后将其添加到 omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
   provider :facebook, AppConfig['facebook_api_key'], AppConfig['facebook_api_secret']           
end
Run Code Online (Sandbox Code Playgroud)

根据轨道环境,它将采用您的密钥.这就是全部,希望它对你有所帮助.


nde*_*eau 10

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

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK']
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
Run Code Online (Sandbox Code Playgroud)

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

  • 这比将密钥放在上传到服务器的文本文件中更安全. (3认同)
  • 这是一个很好的解决方案,因此您的密码不会存储在版本控制中.[Heroku](https://devcenter.heroku.com/articles/config-vars)也很简单:`heroku config:添加FACEBOOK_KEY = abc123xyz` (3认同)