Недавно я создал приложение Sinatra с формой входа (без базового auth). Для того, чтобы предотвратить доступ к приложению, если пользователь не вошел в я положил перед блочным вместоSinatra: Как я могу предоставить доступ к форме входа, не допуская доступа к остальной части моего приложения Sinatra?
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
?
Или ... Есть ли совершенно другая передовая практика, позволяющая справиться с этой ситуацией, блокируя все, кроме материалов, связанных с входом в систему (обработчики, представления, ресурсы)?
вы блокируете только запросы на получение, а не отправляете или помещаете и т. Д. Поместите 'redirect '/ login', если вместо request.path == '/ login' или logged_in?' Вместо 'before' –