2

我有一个很小的 ​​Sinatra 项目,我需要在其中覆盖Rack::Auth::Basic#valid?. 目前我已经将此覆盖放在我的应用程序的主文件中,但是随着事情变得越来越大,这似乎使源代码变得混乱......

require "sinatra/base"

module Rack::Auth
  class Basic
    def valid?(auth)
      # My overrides go here...
    end
  end
end

class App < Sinatra::Base
  use Rack::Auth::Basic, "CustomRealm" do |username, password|
    # Authentication
  end

  get "/" do
    erb :index
  end
end

我想将覆盖移动到外部文件。我的项目结构类似于

* views
|------ index.erb
* config.ru
* app.rb
* README.md
* LICENSE.md
* Gemfile
* Gemfile.lock

我可以在哪里移动Rack::Auth覆盖以便我可以从内部使用它们app.rb?我试过穿上它们,lib/rack/auth/basic.rb但根本没有用……Sinatra 的标准是什么?

4

1 回答 1

1

我不相信在 Sinatra 中有一个“标准”。但这不应该太难做到。

您可以做的最简单的事情是rack_overrides.rb从您的app.rb.

Sinatra 没有自动加载等功能(就像 Rails 那样),因此它不会神奇地从lib/其他目录或其他目录中获取内容。

哦,只是出于好奇:为什么需要覆盖Rack::Auth::Basic#valid?

于 2013-03-14T21:35:29.890 回答