production環境のみダイジェスト認証を有効にする
class ApplicationController < ActionController::Base
USERS = { 'naoty' => 'coolguy' }
protect_from_forgery
before_filter { digest_authentication if Rails.env.production? }
private
def digest_authentication
authenticate_or_request_with_http_digest do |name|
USERS[name]
end
end
end
ポイントは3つ。
- Rails.env.production?でproduction環境かどうかを判定できる。同様にRails.env.development?なんかもできる。
- before_filterにブロックを渡すことで、条件付きでフィルタを適用できる。
- authenticate_or_request_with_http_digestでBasic認証(authenticate_or_request_with_http_basicメソッド)より安全な認証を実装でき、かつ複数のパスを簡単に扱えるようになる。