1

モジュラー 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

これをどのように行うことができるかについて考えている人はいますか?

4

1 に答える 1

0

Filtersの前に使用します。同じルートに異なる動作が必要ですか?

于 2012-06-23T12:23:53.503 に答える