Если достаточна базовая аутентификация HTTP, я бы рекомендовал определить два метода:
helpers do
def protected!
unless authorized?
response["WWW-Authenticate"] = 'Basic realm="Protected Area"'
throw(:halt, [401, "Not authorized\n"])
end
end
def authorized?
@auth ||= Rack::Auth::Basic::Request.new(request.env)
if @auth.provided? && @auth.basic? && @auth.credentials
username,password = @auth.credentials
# verify credentials are correct
end
end
end
Вызовите protected!
от любого действия, которое должно быть защищено (или используйте блок before
для защиты всего). Я оставляю вам проверку учетных данных, поскольку не знаю, как вы храните информацию учетной записи пользователя.