【发布时间】:2012-06-25 05:44:58
【问题描述】:
我想在我的模块化 Sinatra 应用程序中对特定路由使用 HTTP Digest 身份验证。
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 的实例并传入环境,但是使用摘要身份验证执行此类操作会大不相同,而且更像是一个手动验证过程。
这是基本的身份验证示例:
def authorized?
@auth ||= Rack::Auth::Basic::Request.new(request.env)
@auth.provided? &&
@auth.basic? &&
@auth.credentials &&
@auth.credentials == ['admin', 'admin']
end
有人对如何做到这一点有想法吗?
【问题讨论】:
-
这不能使用 sinatra 应用程序顶部的中间件来完成
-
哎呀,小姐完全错过了你已经在做的事情
标签: ruby sinatra rack digest-authentication http-digest