我在哪里可以存储在Rails的http_basic_authentication_with中使用的密码/用户名组合?

时间:2012-11-28 22:28:37

标签: ruby-on-rails authentication http-basic-authentication

我正在尝试使用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中查看的文件...

2 个答案:

答案 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。对于这个以及许多其他事情来说这很好。