概要
Rack の機能を使って Sinatra でベーシック認証を発動させることができるようなので試してみました
Siantra だけでもベーシック認証が使えるので nginx などリバースプロキシが不要になります
環境
- macOS 10.13.4
- Ruby 2.4.1p111
- sinatra 2.0.1
アプリ側でベーシック認証させるページを指定する
- vim app.rb
class AdminPage < Sinatra::Base
set :show_exceptions, false
use Rack::Auth::Basic, "Are you Admin?" do |username, password|
username == 'admin' && password == 'password'
end
get '/' do
'ok'
end
end
アプリ側でベーシック認証させないページを指定する
- vim app.rb
class HomePage < Sinatra::Base
set :show_exceptions, false
get '/' do
'ok'
end
end
config.ru にルーティングを定義する
- vim config.ru
require './app.rb'
run Rack::URLMap.new({
"/" => HomePage,
"/admin" => AdminPage
})
Rack::URLMap
クラスを生成するときにルーティングのハッシュ情報を定義します
先ほど定義したクラスを値に指定しましょう
これでどうなるか
/
には認証なしでアクセスできます/admin
にはベーシック認証が発動し認証に成功しないとアクセスできません
ちなみに /admin/hoge
にアクセスしようとしてもベーシック認証が発動するのでサブディレクトリにも効いているようです
config.ru でトップディレクトリを指定するので、アプリ側で定義したルーティングはサブディレクトリになります
別のユーザを追加したい場合は認証の条件をハッシュなどにすれば OK です
別のページにもベーシック認証を追加したい場合は同じようにクラスを追加し、config.ru にルーティングを追加してあげましょう
最後に
Sinatra でベーシック認証を有効にする方法を紹介しました
認証に失敗した場合は真っ白なページが表示されます
認証ごとに Sinatra::Base
を継承した class を作成する必要があるので not_found
や error
などは各クラス内でちゃんと定義してあげる必要があります
0 件のコメント:
コメントを投稿