2012-06-22 45 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

对,当然,但是你怎么写过滤器呢? –

相关问题