代码之家  ›  专栏  ›  技术社区  ›  Frank Schmitt

如何在Sinatra中排除需要基本身份验证的路径

  •  5
  • Frank Schmitt  · 技术社区  · 14 年前

    1 回复  |  直到 14 年前
        1
  •  13
  •   Konstantin Haase    14 年前
    require 'sinatra'
    
    helpers do
      def protected!
        unless authorized?
          response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth")
          throw(:halt, [401, "Not authorized\n"])
        end
      end
    
      def authorized?
        @auth ||=  Rack::Auth::Basic::Request.new(request.env)
        @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['admin', 'admin']
      end
    end
    
    before { protected! unless request.path_info == "/public" }
    
    get('/public') { "I'm public!" }