目的
Rack::Auth による Basic 認証を行う際のポイントを抑えることを目的とします。
そのためのサンプルの紹介と解説を行います。
Rack::Auth は最も単純な Web アプリケーションでのユーザ認証技術 です。
要件を満たさない場合は、より高度な Web アプリケーション認証技術を使うことをお勧めします。
サンプル
サンプルファイルのダウンロード
以下のファイルをダウンロードし、解凍してください。
入っているのは以下の2つのファイルだけなので、以下に内容を表示します。
- example.zip
hello.rb
# coding: UTF-8 class HelloApp def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello Rack, #{env['REMOTE_USER']}!"]] end end
hello.ru
# coding: UTF-8 $:.unshift(File.dirname(File.expand_path(__FILE__))) require 'hello' use Rack::Auth::Basic do |username, password| username == "taro" && password == "password1" end run HelloApp.new
解説
サンプルを動かすには事前に Rack をインストールする必要があります。 まだ、Rack をインストールしていない場合は、以下のコマンドを実行してください。
gem install rack
サンプルを動かすには、以下のコマンドを実行してください。
rackup hello.ru
ポイントについて解説します。
- ru ファイルで use して使う。
- Rack::Auth は、Rack Middleware である。
- use Rack::Auth::Basic のブロック内で、ユーザ名とパスワードの2つの引数を受け取り、ユーザの認証判断を行う。
- 認証ロジックの定義は自分で行う必要がある。
- Rack::Auth::Basic はユーザ管理機能や認証ロジックを提供してくれない。
- 本サンプルではユーザ名を taro、パスワードを password1 と固定した単純な事例を紹介しているが、ここがデータベースアクセスなどに置き換えて定義する。
- use Rack::Auth::Basic ブロックの評価が true であれば認証が通り、ユーザ名が環境変数 env['REMOTE_USER'] に格納される。
- ユーザ名を取得するには env['REMOTE_USER'] にアクセスする。
- ブロックの評価が false であれば認証は失敗です。ブラウザには再度認証画面が表示される。
- 認証の範囲は、Web アプリケーション全体である。
- use Rack::Auth::Basic のブロック内にはリクエスト情報が渡ってこないため、アクセスページの判断ができない。
- そのため通常の使い方では、特定のページにのみ認証を掛けることはできない。
備考
Rack::Auth::Basic を部品として用いることで、特定のページにのみ認証を掛ける方法があります。
以下のページを参照してください。
コメント
本ページの内容に関して何かコメントがある方は、以下に記入してください。
コメントはありません。 コメント/rack/auth