На днях при выгрузке проекта под Opencart 3 на зарубежный хостинг мы столкнулись с проблемой. После переноса сайта с локального сервера на боевой у нас перестала работать админ панель. Иначе говоря, при попытке войти в админу мы получали окно ввода логина и пароль и более ничего. В случае успешного входа страница перезагружалась, получая токен доступа, но все ровно предлагала ввести логин и пароль вновь. При этом функционал восстановления пароля полностью работал.
Внимание! Данный вариант решения проблемы подходит в том случае если запрос проходит корректно, консоль в инспекторе кода чистая и вы не получаете ошибки 403, 500 и другие. Возможно, у вас выставлены не те права. Нужно предоставить 644 на все файлы в папке public_html и storage и 755 на все папки в рекурсивном формате.
Изучение тем в интернете не помогло решению нашего вопроса, поэтому мы решили действовать методом исключения.
Шаг первый - настройки сервера
Мы отсекли не верную настройку сервера, просто установив чистую сборку через инсталятор на поддомене сразу же на боевом хостинге, тестовый сайт запустился. Следовательно сервер работает, если нет - значит вам нужно смотреть настройки сервера, и это не ваш случай.
Шаг второй - настройка SSL
Проверка настрой редиректов и SSL сертификата. Обязательно посмотрите исходный код формы, и проверьте что указано в post запросе. Тип протокола должен совпадать с текущим. Если сайт работает на https, то и в запросе должен быть указан https запрос. Например: https://you-domain.ru/admin/index.php?route=common/login. Если типы запросов отличаются, то вам нужно настроить корректную работу SSL сертификата на вашем сайте.
Третий шаг - проверка Mysql
Мы поменяли в настройках config.php в основной директории в папке admin, указав пусть до чистой базы данных с тестового сайта на этом же хостинге. После замены у нас получилось войти в панель администратора. Проблема выявлена и она в базе данных. Мы не будем долго и подробно рассказывать, как мы поочередно удаляли таблицы в PhpMyAdmin и проверяли корректность входа на сайт, но по итогу мы нашли проблемную таблицу под названием oc_setting
Шаг четвертый - решение проблемы
Вся проблема заключается в настройке одной единственной ячейки, под названием config_timezone. Если временная зона отличается от той, что у вас установлено на сервере, то вы будете получать бесконечное окно для входа в админ панель. Все что вам нужно, это узнать временную зону на вашем сервере и прописать ее ее в эту ячейку. После чего вы сможете заходить в админку без каких либо проблем.
Для того чтобы узнать временную зону на вашем хостинге или сервере, можно посмотреть ее в настройках php.ini в папке cfg-bin. Нас интересует строчка date.timezone= Europe/Moscow, где Europe/Moscow - нужное нам значение.
Или создайте php файл с содержимым:
<?php date_default_timezone_set('Europe/London'); if (date_default_timezone_get()) { echo 'date_default_timezone_set: ' . date_default_timezone_get() . '; } if (ini_get('date.timezone')) { echo 'date.timezone: ' . ini_get('date.timezone'); } ?>
Поместите его в корневую директорию public_html и откройте через адресную строку. Если вы сделали все правильно, то вы получите информацию о часовом поясе:
date_default_timezone_set: Europe/London date.timezone: Europe/London
После проведенных манипуляций вы избавитесь от проблемы и сможете спокойно завершить вашу работу!