Не Могу Войти В Админку

Началось всё после установки SSL сертификата. Может он конечно и не виноват.

Сейчас не могу войти в админку. Указываю логин пароль и всё. Никакой ошибки, что что-то не верно, просто еще раз это же окно логина показывается. и Адрес

?dispatch=auth.login_form&return_url=admin.php

Перепробовал все браузеры с очисткой кеша - толку нет. Думал пароль не тот, но тогда выдавалась бы ошибка.

Восстановил пароль и по ссылке из email письма для восстановления пароля спокойно вошел, поменял пароль. Захожу в другом браузере - такая же ерунда - не могу войти в админку!!!

Ни один пользователь, менеджер, админ не могут войти в админку!

Восстановил пароль и по ссылке из email письма для восстановления пароля спокойно вошел, поменял пароль. Захожу в другом браузере - такая же ерунда - не могу войти в админку!!!

Ни один пользователь, менеджер, админ не могут войти в админку!

Смотрите контроллер авторизации, в какой момент и что мешает, может модуль какой.

Смотрите контроллер авторизации, в какой момент и что мешает, может модуль какой.

Да, мешает мой модуль (по доставке). Отключил модуль и вошел.

Модуль я разрабатываю уже 2 недели и до сегодняшнего дня проблем не было. Что-то с авторизацией я не трогал вообще.

Просмотрел контроллер авторизации. Прекрасно выполняется. Находит админа и проходит весь как надо

Да, мешает мой модуль (по доставке). Отключил модуль и вошел.

Модуль я разрабатываю уже 2 недели и до сегодняшнего дня проблем не было. Что-то с авторизацией я не трогал вообще.

Войти удалось только 1 раз!!! Теперь даже с отключенным моим модулем не могу войти

Безнадежно? Опять в тех.поддержку???

Безнадежно? Опять в тех.поддержку???

Не знаю чем может помочь тех. поддержка. Копия магазина на локалке работает?

Смотрите контроллер и функции авторизации. Может какой то ваш модуль, что то делает с сессиями? Грохает например :)

C сессиями не работаю в модуле. Пробовал его отключать. 1 раз вошел, а дальше опять не могу.

Копии на локалке нет. Началось после установки SSL.

Контроллер авторизации смотрел. Админа находит, данные все есть. Но есть функция fn_init_user и fn_login_user

они друг из друга вызываются и вот там мне кажется что-то теряется. А что понять не могу.

Непонятки вот такие:

function fn_init_user($area = AREA)
{
    $user_info = array();
    if (!empty($_SESSION['auth']['user_id'])) {
        $user_info = fn_get_user_short_info($_SESSION['auth']['user_id']);
    if (empty($user_info)) { // user does not exist in the database, but exists in session
        $_SESSION['auth'] = array();
    } else {
        $_SESSION['auth']['usergroup_ids'] = fn_define_usergroups(array('user_id' => $_SESSION['auth']['user_id'], 'user_type' => $user_info['user_type']));
		fn_print_r($_SESSION['auth']);
    }
}
$first_init = false;


if (empty($_SESSION['auth'])) {

	fn_print_r('777');

	$udata = array();
    $user_id = fn_get_session_data($area . '_user_id');

    if ($area == 'A' && defined('CONSOLE')) {
        $user_id = 1;
    }

    if ($user_id) {
        fn_define('LOGGED_VIA_COOKIE', true);
    }

    fn_login_user($user_id);

Сначала проходит проверка, что $_SESSION['auth']['user_id'] не пусто. Печатается fn_print_r($_SESSION['auth']);

А потом проходит проверка, что $_SESSION['auth'] пустая - печатается fn_print_r('777');

соответственно вызывается fn_login_user($user_id), из которой ранее вызвана эта fn_init_user

В общем запутался что-то.

В общем запутался что-то.

Найдите место, где вас перекидывает назад на авторизацию.

Найдите место, где вас перекидывает назад на авторизацию.

Даниил, это не так просто для меня.

Правильно ли, что когда я открываю адрес http://сайт.ru/admin.php то меня сразу перекидывает на адрес

http://сайт.ru/admin.php?dispatch=auth.login_form&return_url=admin.php

так и должно быть? По этому адресу и открывается форма логина.

Когда установили SSL сертификат, то сайт вообще перестал открываться. Тех.поддержка сообщила:

"Проблема вызвана настройками сервера. Когда у вас используется безопасное соединение, заголовок Strict-Transport-Security ( https://ru.wikipedia.org/wiki/HSTS) отсылается вашим сервером для принудительного использования браузером протокола HTTPS даже в случае перехода по ссылкам с явным указанием протокола HTTP (http://). В связи с чем возникает принудительный редирект и зацикливание при использовании HTTP-соединения."

Пришлось обращаться к Глебу Гончарову. Он удалил заголовок. Сайт стал открываться. https соединение стало работать для процесса оформления заказа и личного кабинета. Но вот в админку теперь войти я не могу. Как мне кажется, связано что-то с этим.

И найти место, где меня перекидывает обратно на форму логина я не могу. Моих познаний уже не хватает. Убил все выходные на это.

Кто-нибудь может помочь? Тех. поддержка cs-cart пока молчит.

P.S. Прошел весь контроллер auth режимы login_form и login перед выходами из режимов ставил fn_print_die() - печатается, значит вся аутентификация проходит нормально

В чем траблы то?

P.S.P.S.

Есть подозрение, что вот тут проблемы:

if (empty($auth['user_id']) && !fn_check_permissions(Registry::get('runtime.controller'), Registry::get('runtime.mode'), 'trusted_controllers')) {
    if (Registry::get('runtime.controller') != 'index') {
        fn_set_notification('E', __('access_denied'), __('error_not_logged'));
    if (defined('AJAX_REQUEST')) {
        // We should make redirect to page which triggered AJAX-request instead of the AJAX-requested one.
        $login_form_url = 'auth.login_form';

        if (isset($_SERVER['HTTP_REFERER']) &&
            ($referer = @parse_url($_SERVER['HTTP_REFERER'])) &&
            isset($referer['host'], $referer['query']) &&
            $referer['host'] == Registry::get('config.current_host')
        ) {
            $login_form_url .= '?return_url=' . urlencode(
                fn_url_remove_service_params(Registry::get('config.admin_index') . '?' . $referer['query'])
            );
        }

        Tygh::$app['ajax']->assign('force_redirection', fn_url($login_form_url));
        exit;
    }
}
return array(CONTROLLER_STATUS_REDIRECT, 'auth.login_form?return_url=' . urlencode(Registry::get('config.current_url')));

} elseif (!empty($auth[‘user_id’]) && !fn_check_user_type_access_rules($auth)) {
fn_set_notification(‘E’, __(‘error’), __(‘error_area_access_denied’));

return array(CONTROLLER_STATUS_DENIED);

} elseif (!empty($auth[‘user_id’]) && !fn_check_permissions(Registry::get(‘runtime.controller’), Registry::get(‘runtime.mode’), ‘trusted_controllers’) && $_SERVER[‘REQUEST_METHOD’] != ‘POST’) {
// PCI DSS Compliance
$auth[‘password_change_timestamp’] = !empty($auth[‘password_change_timestamp’]) ? $auth[‘password_change_timestamp’] : 0;
$time_diff = TIME - $auth[‘password_change_timestamp’];
$expire = Registry::get(‘settings.Security.admin_password_expiration_period’) * SECONDS_IN_DAY;

if (!isset($auth['first_expire_check'])) {
    $auth['first_expire_check'] = true;
}

// We do not need to change the timestamp if this is an Ajax requests
if (!defined('AJAX_REQUEST')) {
    $_SESSION['auth_timestamp'] = !isset($_SESSION['auth_timestamp']) ? 0 : ++$_SESSION['auth_timestamp'];
}

// Make user change the password if:
// - password has expired
// - this is the first admin's login and change_admin_password_on_first_login is enabled
// - this is the first vendor admin's login
if (($auth['password_change_timestamp'] <= 1 && ((Registry::get('settings.Security.change_admin_password_on_first_login') == 'Y') || (!empty($auth['company_id']) && empty($auth['password_change_timestamp'])))) || ($expire && $time_diff >= $expire)) {

    $_SESSION['auth']['forced_password_change'] = true;

    if ($auth['first_expire_check']) {
        // we can redirect only on first check, else we can corrupt some admin's working processes ( such as ajax requests
        fn_delete_notification('insecure_password');
        $return_url = !empty($_REQUEST['return_url']) ? $_REQUEST['return_url'] : Registry::get('config.current_url');

        return array(CONTROLLER_STATUS_REDIRECT, 'auth.password_change?return_url=' . urlencode($return_url));
    } else {
        if (!fn_notification_exists('extra', 'password_expire')) {
            fn_set_notification('E', __('warning'), __('error_password_expired_change', array(
                '[link]' => fn_url('profiles.update', 'A')
            )), 'S', 'password_expire');
        }
    }
} else {
    $auth['first_expire_check'] = false;
}

}

Это файл init.php из контроллеров админки. Первое условие срабатывает. fn_print_die('7777') срабатывает до

return array(CONTROLLER_STATUS_REDIRECT, 'auth.login_form?return_url=' . urlencode(Registry::get('config.current_url')));

выводятся "7777" а форма повторно нет. Естественно, после return 7777 не выводятся а появляется форма логина. Я так понял, что первое условие из этого файла срабатывать не должно.

При печати перед условием $auth['user_id'] оно действительно пустое! Где-то теряется? Так как при отработке ранее указанных функции логина и инициации данные там были.

В общем ....

Видимо проблемы все таки из-за SSL и удаленного заголовка.

Теперь ни одна страница сайта, кроме главной не открывается! Выдается 404 ошибка, хотя ссылка нормальная!!!!

HELP ME!!!!!!!

Помогите плиз, это катастрофа какая-то???

Куда бежать, к кому????

Самое прикольное, что из меню пропали почти все пункты

Даниил, прошу прощения, можете ли Вы подключиться и посмотреть? А то у меня уже зла на всё это не хватает. Ужас просто.

В тех. поддержку.

Отключить https или в тех. поддержку хостинга.

Отключал https - не помогало

Обратился в тех. поддежку cs-cart

Они ответили:

Я изучил проблему у вас на сервере. Судя по всему, механизм обработки сессий CS-Cart конфликтует с внутренним механизмом управления сессиями в PHP. Это серверная проблема, и нам не удалось воспроизвести проблему на стандартной установке CS-Cart. В качестве решения я отключил регенерацию сессий, добавив следующую строку в файл app/Tygh/Sessions.php:
return $old_id;
после строки:
$old_id = self::getId();

Вопрос: откуда взялась такая проблема? И кто виноват? SSL? cs-cart? Хостинг?

Чем грозит такое решение? И почему это управление сессиями вдруг конфликтует? Нет просто интересно. На других сайтах на этом же хостинге и с этой же версией cs-cart конфликтов нет. Значит SSL виноват? Отключение SSL не помогает.

P.S. теперь хоть в админку войти могу

Теперь ни одна страница сайта, кроме главной не открывается! Выдается 404 ошибка, хотя ссылка нормальная!!!!

А эта проблема так и осталась. Модуль SEO выключал - толку нет

Даниил, не подскажете что делать? В тех. поддержку cs-cart написал еще утром - ответа нет.

Ау, народ, помогите, пожалуйста!!!!!!!!!!!!!!!!

Можете в личку кинуть временный FTP доступ?