我想在我的模块化Sinatra App中对特定路由使用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
有没有人想过如何做到这一点?