Как исключить путь от требования базовой аудитории в Синатре

StackOverflow https://stackoverflow.com/questions/2062801

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пишу небольшой веб -сервис в Руби с помощью Sinatra. Доступ к практически всем контролируется с использованием HTTP Basic Auth (за HTTPS в производстве).

Есть один конкретный каталог, который я хочу исключить из требования разрешения. Есть простой способ сделать это?

Это было полезно?

Решение

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!" }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top