モジュラー Sinatra アプリの特定のルートに HTTP ダイジェスト認証を使用したいと考えています。
sinatra レシピ Web サイト内にリストされている例は、アプリ全体のダイジェスト認証を有効にする方法を簡単に説明しています。これを特定のルートで機能させるために提示されたソリューションは、2 つの個別のアプリ (1 つはダイジェスト認証を使用し、もう 1 つは使用しない) を作成し、保護されたルートと保護されていないルートをそれぞれのアプリケーションに配置することです。
それには、次のようなものが必要です。
require 'sinatra/base'
class Protected < Sinatra::Base
use Rack::Auth::Basic, "Protected Area" do |username, password|
username == 'foo' && password == 'bar'
end
get '/' do
"secret"
end
end
class Public < Sinatra::Base
get '/' do
"public"
end
end
これは私にはやり過ぎのように思えます。
完全に新しいアプリを作成することなく、モジュラー シナトラ アプリで単一のルートを保護する方法はありますか?
Rack::Auth::Basic::Request のインスタンスを作成して環境に渡すことを参照するFAQの例がありますが、ダイジェスト認証でこのようなことを行うことは大きく異なり、手動の認証手順がはるかに多くなります。
基本認証の例を次に示します。
def authorized?
@auth ||= Rack::Auth::Basic::Request.new(request.env)
@auth.provided? &&
@auth.basic? &&
@auth.credentials &&
@auth.credentials == ['admin', 'admin']
end
これをどのように行うことができるかについて考えている人はいますか?