Главная страница сайта становится доступной для незарегистрированных пользователей

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 18 сентября 2025 в 06:58

После обновления на 2.18 шарился в настройках авторизации и в разделе «Ограничения и запреты» случайно убрал блок «Авторизация и регистрация». Т.е. не оставил ничего доступного для незарегистрированных юзеров.

Что привело к ошибке, вроде бы вполне ожидаемо — показывать же ничего нельзя.

Проблема появляется дальше. Если вернуть «Авторизация и регистрация», то главная страница сайта отображается всем и больше не перекидывает на `/auth/login/`

Для всех остальных страниц логика отрабатывает нормально.

Я это повторил на тестовой машине с чистой Instantcms, обновленной с 2.17.3 до 2.18.0. Был ли раньше такой косяк — неизвестно.

Главный вопрос — как на боевом сервере починить назад запрет просмотра сайта для незарегистрированных?

#2 18 сентября 2025 в 07:01

Стесняюсь спросить, что за тема что никому и даже поисковикам нельзя смотреть сайт? Я еще таких не видел, очень интересно стало как вы его продвигаете ?

#3 18 сентября 2025 в 07:08

Это внутренний блог компании для сотрудников. Его не надо продвигать в интернетах:)

#4 18 сентября 2025 в 07:14
Это внутренний блог компании для сотрудников. Его не надо продвигать в интернетах:)
Petrovich

Ясно, ну в таком случае я бы просто создал закрытый ТК с доступами только для сотрудников. Ну ок.

#5 18 сентября 2025 в 07:23

Как костылями решить проблему я понимаю. Все виджеты можно скорректировать по правам доступа.

Тема по сути — багрепорт. Функционал ломается после определенных действий.

#6 18 сентября 2025 в 08:06
Как костылями решить проблему я понимаю.
Petrovich

да я понял вопрос. Но системные права называть "костылями" 😁🤣 Не понимаю )

В таком случае, вам просто нужно отключить сайт в админке, оставив только форму авторизации. Ну еще изменить текст при отключенном сайте. Это самый простой способ.

Изображение

#7 18 сентября 2025 в 08:17

Ещё раз. Из коробки все работает корректно. Не требуется отключать сайт или настраивать права для виджетов. Просто ставится галочка, что сайт доступен только зареганным пользователям. Тогда с любой, в т.ч. главной страницы, перекидывает на логин.

Если после этого «случайно» убрать все пункты из «Ограничения и запреты», попытаться зайти на сайт, получить ошибку и вернуть в «Ограничения и запреты» раздел «Авторизация и регистрация» — главная страница становится доступной для всех и не редиректит на логин.

Это баг. Хочется починить и вернуть поведение из коробки. 

#8 18 сентября 2025 в 08:32

и в разделе «Ограничения и запреты» случайно убрал блок «Авторизация и регистрация».

Petrovich

Что то у меня нет такого блока в этом разделе. Скрин покажите.

#9 18 сентября 2025 в 08:35

Изображение

Добавлено спустя 1 минуту

Это настройки по умолчанию. Если этот модуль убрать и оставить пустой список — для незалогиненых будет ошибка.

Если вернуть назад — им станет доступна главная страница

#10 18 сентября 2025 в 08:58

Проверил у себя. После удаления получаю ошибку. Циклическое перенаправление. Вернул через БД. Всё работает корректно. На главной страница авторизации. Там ещё должен быть компонент география по умолчанию. Может из за него у вас не работает

#11 18 сентября 2025 в 09:10

Вернул через БД

Lora

Это, судя по всему, всё как раз чинит. На боевом сервере в рабочий день бэкап накатывать кажется не лучшей идеей. Получается, что ломается что-то в бд, что ли...

Добавлено спустя Только что

Если вернуть из админки без восстановления бэкапов, а просто изменением настроек — оно ломается.

#12 18 сентября 2025 в 09:19

Если вернуть из админки без восстановления бэкапов, а просто изменением настроек — оно ломается.

Petrovich

А как вы вошли в админку, если у вас всё сломалось?

#13 18 сентября 2025 в 09:27

я из нее не выходил. Админка — в хроме. Проверка, что происходит — в другом браузере.

Пока не разлогинишься же всё работает.

#14 18 сентября 2025 в 09:52

Повторил в двух браузерах. Ошибка стала другой. Откатите всё назад. Откройте файл

\system\controllers\auth\hooks\page_is_allowed.php

стр примерно 16

Найдите код

  1. // Если гостям запрещено просматривать сайт, перенаправляем на страницу авторизации
  2. if (!empty($this->options['is_site_only_auth_users'])) {
  3. if (!$this->cms_user->is_logged && !in_array($this->cms_core->uri_controller, $this->options['guests_allow_controllers'])) {
  4. return $this->redirectToLogin();
  5. }
  6. }

и замените на этот

  1. // Если гостям запрещено просматривать сайт, перенаправляем на страницу авторизации
  2. if (!empty($this->options['is_site_only_auth_users'])&& $this->options['guests_allow_controllers']!=null) {
  3. if (!$this->cms_user->is_logged && !in_array($this->cms_core->uri_controller, $this->options['guests_allow_controllers'])) {
  4. return $this->redirectToLogin();
  5. }
  6. }

Это исправит ошибку при пустом значении поля. Но при удалении и затем возврате в базу пишутся лишние кавычки. Поэтому и открывается главная. Нужно открыть таблицу cms_controllers и в поле options контроллёра auth найти параметр guests_allow_controllers: В нём будет так

guests_allow_controllers:

-""

— auth

Уберите первую строку с пустыми кавычками и всё заработает.

#15 18 сентября 2025 в 10:00

Спасибо большое.

Стоит такое писать на гитхаб или отсюда заберут? :)

Похожие темы

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.