【问题标题】:How to handle OmniAuth callbacks in multiple environments?如何在多个环境中处理 OmniAuth 回调?
【发布时间】:2011-12-05 13:21:48
【问题描述】:

我有一个应用程序专门使用 Facebook 作为身份验证提供程序,并且已正确设置生产模式的回调。为了让它工作,你为你的 Facebook 应用程序提供一个站点 URL 和一个站点域以用于回调,在我的例子中,它分别是 http://appname.heroku.comappname.heroku.com

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

如何在不更改 Facebook 设置的情况下解决此问题?

【问题讨论】:

  • 使用域 localhost:3000 创建另一个 facebook 应用程序进行开发

标签: ruby-on-rails ruby facebook omniauth


【解决方案1】:

创建另一个具有域localhost:3000 的 facebook 应用程序用于开发和创建 config.ymlconfig 目录中

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

它会根据 Rails 环境获取您的密钥。就这些了,希望对你有帮助。

【讨论】:

  • 很明显的解决方案。谢谢
  • 顺便说一下,域不能是 localhost:3000 因为 Facebook 不会接受。 URL 应该是localhost:3000,域是 localhost.local,我的 hosts 文件设置为 127.0.0.1 localhost.local
  • 我有几个开发应用程序,主机 http://localhost:3000/ 和域 localhost。一切正常
  • 想知道为什么 Facebook 不允许我使用 localhost - 不是唯一一个有问题的stackoverflow.com/questions/7862974/…
  • 可能你没有专用IP,不知道
【解决方案2】:

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

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

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

【讨论】:

  • 是的,但我不喜欢这个解决方案,它只是 clean 对我来说不够。
  • 这比将密钥保存在上传到服务器的文本文件中更安全。
  • 这是一个不错的解决方案,因此您的密码不会存储在版本控制中。 Heroku 也让这件事变得简单:heroku config:add FACEBOOK_KEY=abc123xyz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多