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)はRails2.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']

次に、SOME_USER と SOME_PASS が環境変数として設定されている Rails アプリがどのようにロードされるかを確認してください。

また、上で選んだ変数名はどれもひどいものです。より良いものを選んでください。

また、環境で必要でない限り、SettingsLogic をお勧めします。これと他の多くのことでいいです。

于 2012-11-28T22:36:21.637 に答える