Найдите место, где вас перекидывает назад на авторизацию.
Даниил, это не так просто для меня.
Правильно ли, что когда я открываю адрес 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'] оно действительно пустое! Где-то теряется? Так как при отработке ранее указанных функции логина и инициации данные там были.
В общем ....