WEBrick で Basic 認証をかけるには、例えばこういうやり方ができるが、
require 'webrick' include WEBrick port = ENV['PORT'] user = ENV['USER'] pass = ENV['PASS'] server = HTTPServer.new( :Port => port, :DocumentRoot => './', :RequestCallback => lambda do |req, res| HTTPAuth.basic_auth(req, res, "my realm") do |username, password| username == user && password == pass end end ) trap("INT"){ server.shutdown } server.start
Heroku の場合ちょっとクセがあって、環境変数 USER
か PASS
のいずれかが config:set されていないと、 Basic 認証がかからない。上記のコードだと、 Heroku にデプロイされている Ruby アプリケーションのルートディレクトリの dir index が丸見えになる。
localhost でこのプログラムを実行して WEBrick を起動すると、環境変数が未定義でも Basic 認証のダイアログが出る。 localhost で動作確認して heroku push した状態で環境変数をセットし忘れると、認証無しで Git リポジトリ内のデータを全て公開するハメになるので注意。
追記: これ、ローカルのシェルだと USER 環境変数が定義されてるからだった。 USER を unset したら Basic 認証かからなかった。