В сфере исполнительского искусства — там, где я работаю — многие сайты артистов и компаний имеют так называемую «профессиональную» зону, защищенную паролем часть веб-сайта, предназначенную для профессионалов отрасли или представителей прессы. Часто содержит примечания к программе, изображения с высоким разрешением, технических райдеров; все, чем компания захочет поделиться, только с некоторыми.
Недавно я реализовал такую профессиональную область для статического веб-сайта, размещенного на Netlify. В этой статье я расскажу вам о настройке, которую я создал для этого. Мы будем использовать бессерверные функции, перенаправления и отличную службу идентификации Netlify, чтобы скрыть определенные части статического сайта за паролем.
Мы хотим скрыть некоторые страницы за паролем, но нет необходимости в полноценной учетной записи пользователя. В конце концов, информация, которую мы хотим защитить, не привязана к конкретному пользователю; мы просто не хотим никому показывать это. Наш вариант использования очень похож на защищенное паролем видео на Vimeo, в котором посетителю нужен только пароль, а не учетная запись для доступа к частному ресурсу.
Тем не менее, мы огораживаем не отдельный ресурс, а территорию. Посетителю не нужно вводить пароль на каждой странице в защищенной части сайта. Пройдя через дверь, они могут свободно передвигаться. Это сложная часть, поскольку статические сайты не имеют доступа к сеансам для сохранения состояния.
Наконец, я хотел, чтобы это работало без какого-либо клиентского JavaScript. Это означает, что мы не можем получать данные для динамического заполнения наших защищенных страниц, что в противном случае могло бы стать жизнеспособной стратегией.
Кодирование по
Я создал стартовый репозиторий для всех, кто хотел бы следить за тем, как мы кодируем и настраиваем эту функциональность. Вы можете развернуть чистый сайт в Netlify одним нажатием кнопки. Каждый раз, когда вы фиксируете и отправляете изменения в свою копию репозитория, сайт будет повторно развернут.
Контроль доступа на основе ролей
Мы предоставляем доступ посетителям в зависимости от их роли, от того, являются ли они «профи». Поэтому ролевой контроль доступа Netlify приходит на ум как подходящий инструмент для защиты страниц. Назначая определенные роли определенным пользователям, мы можем перенаправлять их в разные области сайта.
Netlify позволяет устанавливать правила перенаправления с условием Role . Вы можете добавить файл _redirects в общий каталог или использовать альтернативный синтаксис для файла конфигурации netlify.toml в корневом каталоге. Здесь я покажу последнее. Добавьте это в файл TOML:
Сначала посмотрите на нижнее правило. Это указывает Netlify перенаправлять любые запросы страниц из каталога / pro / на страницу / login / . Если только не сработает верхнее правило, которое позволяет посетителям получать доступ к профессиональным страницам, если у них установлен правильный набор ролей. Обратите внимание, как мы принудительно перенаправляем . Без этого параметра Netlify игнорирует любые перенаправления с реально существующих страниц. Если все пойдет хорошо, вы больше не сможете добраться до зоны профи.
Теперь, как нам установить это свойство Role ? Используя JSON Web Tokens, вкратце JWT. Вы можете думать о JWT как о зашифрованных учетных данных, которые мы будем хранить как файл cookie во внешнем интерфейсе. При каждом запросе страницы Netlify ищет файл cookie nf_jwt . Если присутствует, cookie с JWT декодируется и читается. Результирующий объект JSON определяет, приписывает ли Netlify роль посетителю и, следовательно, произойдет ли перенаправление на основе ролей.
Мы воспользуемся Netlify Identity для генерации токенов аутентификации.
Настройка Netlify Identity
Netlify Identity — это сервис для управления и аутентификации пользователей на вашем сайте. Хотя нам не нужны учетные записи пользователей с именем пользователя и паролем, мы можем перепрофилировать сервис для создания входов только с паролем. Мы создадим одного пользователя. Когда посетитель пытается войти в систему, он сообщит пароль, а мы введем для него имя пользователя.
Во-первых, нам нужно включить службу на панели управления сайта на вкладке «Идентификация». Уровень бесплатного пользования допускает до 1000 пользователей, так что у нас все должно быть хорошо.