Как авторизоваться под администратором без пароля
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"]);
}
И пробуем скрипт:
После нажатия на ссылку с логином:
В заключение весь код страницы.
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);