RamazeさんにおけるBasic認証のやり方

そう言えば「そもそもRamazeさんでBasic認証ってどうやるの?」と思う人もたくさん居るはずです。私もパッチ書くまでは知りませんでした。まぁBasic認証って簡単だからもちろんRamazeさんでやるのだって難しくありません。しかもRamazeさんはBasic認証のサンプル(examples/simple_auth.rb)を標準添付してくれているという親切さっぷりなのでこれを見ることにしましょう。

require 'rubygems'
require 'ramaze'

class MainController < Ramaze::Controller
  LOGINS = {
   :username => 'password',
   :admin => 'secret'
  }.map{|k,v| ["#{k}:#{v}"].pack('m').strip} unless defined? LOGINS

  helper :aspect

  before_all do
    response['WWW-Authenticate'] = %(Basic realm="Login Required")
    respond 'Unauthorized', 401 unless auth = request.env['HTTP_AUTHORIZATION'] and
                                       LOGINS.include? auth.split.last
  end

  def index
    'Secret Info'
  end
end

Ramaze.start :adapter => :mongrel

というわけで、ほとんど解説が不要なくらい簡単ですね。"helper :aspect"というのは、before_all ブロックを書くために必要な aspect ヘルパーを呼び出すものです。before_all はリクエストを処理する前に行なう準備体操のようなものですから、ここの中で認証行なえば index とかのリクエスト処理部には認証に成功した場合の処理だけを記述して良いわけです。

ユーザ名とパスワードの設定はここでは LOGINS で行なっていますが、実用的なアプリケーションではこれをもう少しまっとうなものに変えてあげましょう。以上で終わりです、やっぱりRamazeさんは簡単親切ですね!