我正在尝试使用rack和dav4rack构建一个webdav实现,它将根据登录自动将用户带到他们自己的目录。所以,一个(不工作)的例子与config.ru:
map '/webdav' do
use Rack::Auth::Basic do |username, password|
Site.valid_login? username, password
@site = Site[username: username]
end
run DAV4Rack::Handler.new(
root: @site.files_path,
root_uri_path: '/webdav'
)
end
但是,我无法使@ site.files_path工作,因为它在启动时创建应用程序,在这里我需要为每个传入请求动态创建DAV4Rack :: Handler。
是否可以使用Rack执行此操作?
答案 0 :(得分:1)
这就是诀窍:
map '/webdav' do
use Rack::Auth::Basic do |username, password|
Site.valid_login? username, password
end
run lambda { |env|
handler = DAV4Rack::Handler.new(
root: Site[username: env['REMOTE_USER']].files_path,
root_uri_path: '/webdav'
)
handler.call(env)
}
end