君の瞳はまるでルビー - Ruby 関連まとめサイト

Rack::Auth::Basic を使った認証のサンプル

最終更新: 2015-03-31 (火) 21:53:19 (1688d)

目的

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

ポイントについて解説します。

  • 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

お名前: