Как исключить путь от требования базовой аудитории в Синатре
-
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!" }
Не связан с StackOverflow