2012-06-22 44 views
1

我想在我的模塊化Sinatra應用中對特定路由使用HTTP摘要式身份驗證。對單個路由使用HTTP摘要式身份驗證

sinatra recipes website中列出的示例僅描述如何爲整個應用程序啓用摘要身份驗證。針對特定路線的解決方案是爲了創建兩個獨立的應用程序(一個使用摘要身份驗證,另一個不使用),將受保護和未受保護的路線置於各自的應用程序中。

這就需要像下面這樣:

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 

這似乎有點小題大做了我。

有沒有辦法在模塊化的sinatra應用程序中保護單個路線,而無需創建全新的應用程序?

FAQ中有一個例子,它創建一個Rack :: Auth :: Basic :: Request實例並傳入環境中,但是使用digest auth做這樣的事情會有很大的不同,並且更多的是手冊認證程序。

這裏是基本認證例如:

def authorized? 
    @auth ||= Rack::Auth::Basic::Request.new(request.env) 
    @auth.provided? && 
    @auth.basic? && 
    @auth.credentials && 
    @auth.credentials == ['admin', 'admin'] 
end 

有沒有人對如何可以這樣做的想法?

+0

不能用Sinatra應用程序的中間件完成這件事 – Viren

+0

哦拍完小姐完全錯過了,你已經在做 – Viren

回答

0

使用之前Filters。你對同一條路線需要不同的行爲嗎?

+1

對,當然,但是你怎麼寫過濾器呢? –

相關問題