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メソッド)より安全な認証を実装でき、かつ複数のパスを簡単に扱えるようになる。