3

我正在尝试使用 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

我正在寻找一种将密码和用户名保留在控制器代码之外的方法。我听说过环境变量或“配置文件”作为一个选项,但我不知道如何实现它。

我已经看到了这个关于在哪里放置 http 基本身份验证的用户名/密码的问题,但答案(Railscast)是针对 Rails 2.x 的。

谢谢!

编辑:我应该澄清我正在使用存储库,因此需要某种可以从 git 中签出的文件...

4

2 回答 2

3

IMO 最好的办法是使用 yaml 文件和应用程序级变量。

在 rails init 上方的 application.rb 内部尝试如下操作:

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

享受!

于 2012-11-28T22:34:48.597 回答
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。这对这个和其他许多事情都很好。

于 2012-11-28T22:36:21.637 回答