如何在多种环境中处理OmniAuth回调?
我有一个应用程序,它专门使用Facebook作为身份validation提供程序,并正确设置生产模式的回调。 为了实现这一点,您可以为Facebook应用程序提供站点URL和站点域以进行回调,在我的例子中,它分别是http://appname.heroku.com
和appname.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']
对我来说似乎更容易(也更短)。
- Omniauth-facebook哈希没有显示Facebook’用户名’字段,使用rails 3
- 使用OpenID,Twitter或Facebook进行Rails 3身份validation
- Devise – Omniauth – 如果用户通过Facebook登录,则隐藏密码字段
- 在Facebook页面上发布的简便方法(不是个人资料,而是粉丝页面)
- 使用Ruby进行Facebook FQL查询
- Facebook Graph API的gem
- 为什么我在前2位用户之后收到“此授权码已被使用”?
- 使用像facebook这样的omniauth提供程序时,Devise不会正确地重定向到存储位置
- Facebook登录OmniAuth错误更改被拒绝