我应该隐藏我的facebook app_id和secret_key吗?

时间:2013-03-03 19:40:14

标签: ruby-on-rails facebook-graph-api facebook-oauth koala

我已经完成了在ruby on rails上创建我的第一个facebook应用程序。在我的控制器中,我有点像

 @oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)

我想知道我的控制器中是否可以使用这些值,还是应该将其隐藏在应用程序的其他位置?将它们分配给变量?

这里的编程习惯是什么?

2 个答案:

答案 0 :(得分:4)

实际上,我们希望避免在版本控制系统中记录这些值。

我通常采用的方法如下:

将以下内容添加到应用程序类定义

中的config/application.rb
# Loads app config from /config/env_vars.yml
require 'yaml'
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
config = YAML.load_file(rails_root.to_s + '/config/env_vars.yml')
if config.key?(Rails.env) && config[Rails.env].is_a?(Hash)
  config[Rails.env].each do |key, value|
    ENV[key] = value.to_s
  end
end

在名为config/的{​​{1}}中创建一个文件,并包含以下内容

env_vars.yml

用您的api详细信息替换development: FB_APP_ID: APP_ID_HERE FB_APP_SECRET: APP_SECRET_HERE APP_ID_HERE。根据需要向该文件添加尽可能多的其他值(即Twitter密钥等),并为每个环境重复(例如,如果您有用于开发,登台和生产的不同FB应用程序)。然后可以在控制器中将这些引用为APP_SECRET_HERE等。

如果使用这种方法,您可以将env_vars.yml保留在VCS之外,这意味着您实际上没有将这些值提交到您的存储库,同时仍然可以将它们提供给您的应用。


最后,如果您使用Heroku,则为每个应用程序分配这些值作为环境变量很容易(即ENV['FB_APP_ID'] - 有关详细信息,请参阅https://devcenter.heroku.com/articles/config-vars),从而无需将这些值提交到在推进Heroku之前的回购。

N.B。如果使用Heroku,则对上述方法进行一些修改

如果从git中排除heroku config:set FB_APP_ID=234234324234,则在推送到Heroku时此文件将不可用,导致您的应用在启动时崩溃。最简单的解决方案是修改添加到env_vars.yml的代码,如下所示:

config/application.rb

通过将其包装在# Loads app config from /config/env_vars.yml unless Rails.env == 'production' require 'yaml' rails_root = Rails.root || File.dirname(__FILE__) + '/../..' config = YAML.load_file(rails_root.to_s + "/config/env_vars.yml") if config.key?(Rails.env) && config[Rails.env].is_a?(Hash) config[Rails.env].each do |key, value| ENV[key] = value.to_s end end end 条件中,如果在unless Rails.env == 'production'(Heroku的默认环境)上运行,它将被跳过。如果为Heroku使用多个环境(例如productionstaginguat),则可以将其修改为

production

一旦提交并推送到Heroku,它将不再寻找unless %w(staging uat production).include?(Rails.env) 文件,让您可以通过{{1}自由设置配置变量。 } Heroku toolbelt命令。

答案 1 :(得分:3)