我正在尝试使用Rails的http_basic_authenticate_with方法来保护个人应用。文档将此作为示例:
class PostsController < ApplicationController
http_basic_authenticate_with :name => "dhh", :password => "secret", :except => :index
def index
render :text => "Everyone can see me!"
end
def edit
render :text => "I'm only accessible if you know the password"
end
end
我正在寻找一种方法来保护我的控制器代码中的密码和用户名。我听说过环境变量或“配置文件”作为选项,但我不知道如何实现它。
我已经看到了这个previous question关于在何处输入http basic auth的用户名/密码,但答案(Railscast)是针对Rails 2.x的。
谢谢!
编辑:我应该澄清我正在使用存储库,因此需要某种我可以从git中查看的文件...
答案 0 :(得分:3)
IMO最好的办法是使用yaml文件和应用程序级变量。
在你的application.rb里面,在rails init上面尝试这样的事情:
raw_config = File.read("#{Rails.root}/config/app_config.yml")
APP_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys
然后创建一个app_config.yml文件,其中包含以下键:
name: dhh
password: secret
你也可以设置环境特定的:
development:
name: dhh
password: secret
production:
name: whatever
password: sauce
一旦你这样做,你可以像这样引用应用程序级变量:
http_basic_authenticate_with :name => APP_CONFIG[:name], :password => APP_CONFIG[:password], :except => :index
享受!
答案 1 :(得分:2)
如果是我,我会使用SettingsLogic并将它们存储在那里。
https://github.com/binarylogic/settingslogic
如果您希望它们来自环境,那么您可以在控制器中执行以下操作:
http_basic_authenticate_with :name => MY_USER, :password => MY_PASS, :except => :index
然后说config / initializers / my_user_pass.rb:
MY_USER=ENV['SOME_USER']
MY_PASS=ENV['SOME_PASS']
然后确保您的Rails应用程序如何被加载,SOME_USER和SOME_PASS被设置为环境变量。
另外,我上面提到的所有变量名都非常糟糕。请选择更好的东西。
另外..除非你在你的环境中需要它们,否则我真的建议使用SettingsLogic。对于这个以及许多其他事情来说这很好。