Как авторизоваться под администратором без пароля
1. Создайте файл admin_auth.php со следующим содержимым<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); global $USER; $USER->Authorize(1); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");2. Закиньте на сервер по ftp или через админку хостинга
3. Откройте в браузере http://ваш_сайт/admin_auth.php
Пишем скрипт авторизации
А теперь, если интересна теория. Наткнулся на днях в документации Bitrix’a на интересную (как мне показалось) функцию.bool CUser::Authorize( int user_id )
Функция непосредственно осуществляет процесс авторизации пользователя. Инициализирует необходимые сессионные переменные и переменные объекта класса CUser. Если авторизация успешна, то возвращает «true», иначе — «false» ( документация).
А вот, что интересно: функция принимает только ID пользователя. Проверка логина/пароля (видимо) по задумке разработчиков ложится на web-developer’ов. В отличии, например, от CUser::Login, которая перед авторизацией проверяет и логин, и пароль.mixed CUser::Login( string login, string password, string set_auth_cookie = "N", string convert_password_to_md5 = "Y" )
Функция проверяет логин и пароль и если они корректные, то авторизует пользователя. Если авторизация успешная, то возвращает «true», иначе если логин и пароль некорректные, то возвращает массив с ошибкой для функции ShowMessage ( документация).
В Битриксе все админы по умолчанию попадают в группу с id=1. Зная это получаем список администраторов сайта:
$filterUsers = array( "GROUPS_ID" => array(1), ); $paramsUsers = array( "FIELDS" => array( "ID", "LOGIN", "PASSWORD", "NAME", "LAST_NAME", "EMAIL", "LAST_LOGIN", "DATE_REGISTER"), ); $dbUsers = CUser::GetList(($by='id'), ($order='asc'), $filterUsers, $paramsUsers);
Авторизуем при нажатии.
if ($_GET["id"]) { CUser::Authorize($_GET["id"]); }
И пробуем скрипт:
После нажатия на ссылку с логином:
Читайте также: Как мы спасали сайт на 1С-Битрикс от баннерного вируса
В заключение весь код страницы.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Песочница"); if(!CModule::IncludeModule("iblock")) { $this->AbortResultCache(); ShowError("IBLOCK_MODULE_NOT_INSTALLED"); return false; } $users = array(); $pageUrl = $_SERVER['REQUEST_URI']; $filterUsers = array( "GROUPS_ID" => array(1), ); $paramsUsers = array( "FIELDS" => array( "ID", "LOGIN", "PASSWORD", "NAME", "LAST_NAME", "EMAIL", "LAST_LOGIN", "DATE_REGISTER", ), ); $dbUsers = CUser::GetList(($by='id'), ($order='asc'), $filterUsers, $paramsUsers); echo "<table border="1px">"; while ($arUsers = $dbUsers->Fetch()) { echo "<tr> <td>" . $arUsers["ID"] . "</td> <td><a href='" . $pageUrl . "?id=" . $arUsers["ID"] . "'>" . $arUsers["LOGIN"] . "</a></td> <td>" . $arUsers["NAME"] . "</td> <td>" . $arUsers["LAST_NAME"] . "</td> <td>" . $arUsers["EMAIL"] . "</td> <td>" . $arUsers["LAST_LOGIN"] . "</td> <td>" . $arUsers["DATE_REGISTER"] . "</td> </tr>"; } echo "</table>"; if ($_GET["id"]) { CUser::Authorize($_GET["id"]); } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
Обновлено: код не сработает в новых версиях Bitrix. Для авторизации можно использовать:
global $USER; $USER->Authorize(1);