読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Basic認証を行う簡単なサンプル

Ruby Sinatra

SinatraのFAQBasic認証を行うサンプルがあったので試してみます。といっても、「set Rack::Auth::Basic」を呼び出すだけ。

require 'rubygems'
require 'sinatra'

# 認証を設定。
# ユーザー名が「foo」,「var」の場合のみアクセスを許可する。
use Rack::Auth::Basic do |username, password|
  username =~ /(foo|var)/
end

# 後は普通にrouteを登録すればOK
get( "/" ) {
  'Hello world!'
}

スクリプトを実行し、

http://127.0.0.1:4567/

にアクセスすれば、Basic認証のダイアログが表示されます。

特定のパスでのみ認証を有効化する

上の例では、サーバーのすべてのパスで認証が必要になります。特定のパスにアクセスする場合のみ認証を有効化したい場合は、独自に実装が必要です。

require 'rubygems'
require 'sinatra'

# このrouteを誰でも実行できる
get '/any' do
  "誰でも閲覧できる"
end

# このrouteは認証されたユーザーのみ閲覧可能
get '/protected' do
  # 認証チェック
  @auth ||=  Rack::Auth::Basic::Request.new(request.env)
  unless  @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials[0] =~ /(foo|var)/
    response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth")
    throw(:halt, [401, "Not authorized\n"])
  end
  "認証されたユーザーのみ閲覧できる"
end

↑のスクリプトでは、

http://127.0.0.1:4567/any

にアクセスする場合は認証不要ですが、

http://127.0.0.1:4567/protected

を参照する場合は認証が必要になります。なお、サンプルでは、わかりやすいようにrouteの内部で認証チェックを行っていますが、Helperを使って認証機能を登録する感じで実装するのがスマートですね。SinatraのFAQではHelperを使う例が紹介されています。