Я недавно создал приложение Sinatra с формой входа (без базовой аутентификации). Чтобы запретить доступ к приложению, если пользователь не вошел в систему, я поставил блок before
before do
unless request.path_info == '/login'
authenticated?
end
end
Я быстро понял, что это помешало мне получить доступ к ресурсам в общедоступном каталоге, таким как моя таблица стилей и логотип, если только сначала не прошла аутентификацию. Чтобы обойти это, я изменил свой фильтр на следующее:
before do
unless request.path_info == '/login' || request.path_info == "/stylesheets/master.css" || request.path_info == "/images/logo.png"
authenticated?
end
end
Если бы было много ресурсов, мне нужно было бы предоставить исключения для этого способа, чтобы они быстро стали подавляющими. Как лучше кодировать это, чтобы я мог делать исключения для общедоступного каталога или даже его отдельных подкаталогов и файлов, таких как /stylesheets
, /images
, /images/bg.png
, но не /secret
или /secret/eyes-only.pdf
?
Или ... Есть ли совсем другая лучшая практика, чтобы справиться с этой ситуацией блокировки всего, кроме вещей, связанных с входом в систему (обработчики, представления, ресурсы)?