web-dev-qa-db-ja.com

Ruby on Rails app on herokuの単純なhttp認証を設定する方法はありますか?

単純なhttp認証を使用してherokuにプライベートステージングサーバーをセットアップしたいと思います。それは可能ですか?

27
Eric

絶対に。最も簡単な解決策は、Railsの組み込みの基本認証サポートを使用するものをアプリケーションコントローラーに配置することです(ここを参照: http://railscasts.com/episodes/82-http-basic-authentication )そしてそれをあなたのRails.envの条件でラップするだけです。 Herokuでは、デフォルトでRails_ENVが本番環境に設定されていますが、heroku confighttp://docs.heroku.comを使用して、本番環境以外のアプリでこれを変更できます。/config-vars )。

ロードブロッキングスタイルのRackミドルウェアをインストールすることも検討できますが、私は上記を使用します。

7
tfe

よりクリーンな方法は、数行のRackミドルウェアをステージング環境の構成にドロップし、コントローラーロジックをそのままにすることです。

# config/environments/staging.rb
MyApp::Application.configure do
  config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p|
    [u, p] == ['username', 'password']
  end

  #... other config
end

このヒントは、Ole MortenAmundsenの好意によるものです。詳細とHerokuパスワードの指定:

http://olemortenamundsen.wordpress.com/2011/04/05/Ruby-secure-staging-environment-of-your-public-app-from-users-and-bots/

52
Adam Florin

Rails4で、「後に挿入するミドルウェアがありません:Rack :: Lock」エラーが発生しました。 Adamのコードを以下に置き換えます。

# config/environments/staging.rb
MyApp::Application.configure do
  config.middleware.use '::Rack::Auth::Basic' do |u, p|
    [u, p] == ['username', 'password']
  end
  # ...
end

参照: http://www.intridea.com/blog/2013/6/4/tips-and-tricks-for-deploying-Rails-4-apps-on-herok

14
Nobu

認証にMozillaPersonaを使用するNiceherokuアドオンがあります。少量のサイト(1か月あたりの認証数が10,000未満)の場合は無料です。

https://addons.heroku.com/wwwhisper

インストールと構成が非常に簡単です。

2

Application_controller.rbを使用してそれを行う別の方法:

  # app/controllers/application_controller.rb
  before_filter :http_basic_auth

  def http_basic_auth
    if ENV['HTTP_AUTH'] =~ %r{(.+)\:(.+)}
      unless authenticate_with_http_basic { |user, password|  user == $1 && password == $2 }
        request_http_basic_authentication
      end
    end
  end

次に、値をエクスポートする必要があります。開発用:

 export HTTP_AUTH=test:test

Herokuの場合:

 heroku config:set HTTP_AUTH=test:test

ウィンドウプロンプトが表示されたら、ユーザー/パスワード=>テスト/テストを入力する必要があります。

それはあなたがそれが役に立つと思うことを願っています。

1
heriberto perez

Rails 5. config/application.rbまたは選択した環境構成で:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == ["user", "password"]
end

さらに、 Oleのブログ投稿 でENV変数を使用することが指摘されています。 env varが設定されていない場合は、デフォルトでランダムなパスワードを使用することをお勧めします。

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex]
end
1
thisismydesign