Недавно на одном из форумов, посвященных битриксу, нашел запись, где человек ищет битрикс компонент изменения пароля. Оказалось, простейший компонент отсутствует в системе. Поменять пароль в битрикс можно либо через профиль пользователя (bitrix:main.profile) либо при помощи отправки контрольной строки на емайл, перейдя по ссылке “забыли пароль”. Отдельного компонента изменения пароля в битриксе, к сожалению нету.
Я сделал этот компонент.
Давайте рассмотрим где могут лежать компоненты в битриксе:
-
в папке /bitrix/components/bitrix/ лежат стандартные компоненты битрикса
-
в папке /bitrix/components/название_компонента/ лежат компоненты, не являющиеся частью стандартной системы
-
также нестандартные компоненты могут лежать в папке /local/components/название_компонента/
Перейдем к написанию компонента изменения пароля битикс:
на страничке смены пароля вешаем следующий код:
Разместим компонент в папке /local/components/test/, для этого создадим там необходимую структуру:Код компонента (файл component.php)
LANG-файл компонента (change.pass/lang/ru/component.php)
<? $MESS["NOT_THE_SAME"] = "Введенные пароли не совпдают"; $MESS["PASSWORD_EMPTY"] = "Заполните поле \"новый пароль\""; $MESS["CONFIRM_PASSWORD_EMPTY"] = "Заполните поле \"подтверждение нового пароля\""; $MESS["PASSWORD_WRONG"] = "Введенный неверный пароль"; ?>
Шаблон (change.pass/templates/.default/template.php):
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var array $arParams */
/** @var array $arResult */
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponentTemplate $this */
/** @var string $templateName */
/** @var string $templateFile */
/** @var string $templateFolder */
/** @var string $componentPath */
/** @var CBitrixComponent $component */
?>
<div class="change_pass">
<?if($arResult['ERROR']){?>
<span class="error"><?=$arResult['ERROR'];?></span>
<?}?>
<?if($arResult['SUCCESS'] == 'Y'){?>
<span class="success"><?=GetMessage("SUCCESS");?></span>
<?}?>
<form action="" method="post">
<input type="hidden" name="do" value="send" />
<div class="item">
<input type="password" value="<?=$_REQUEST['old_password'];?>" name="old_password" placeholder="<?=GetMessage("OLD_PASSWORD");?>" required />
</div>
<div class="item">
<input type="password" value="<?=$_REQUEST['password'];?>" name="password" placeholder="<?=GetMessage("NEW_PASSWORD");?>" required />
</div>
<div class="item">
<input type="password" value="<?=$_REQUEST['confirm_password'];?>" name="confirm_password" placeholder="<?=GetMessage("CONFIRM_NEW_PASSWORD");?>" required />
</div>
<div class="item">
<input type="submit" value="<?=GetMessage("SEND");?>" />
</div>
</form>
</div>
LANG-файл шаблона:
<?
$MESS["OLD_PASSWORD"] = "Введите старый пароль"; $MESS["NEW_PASSWORD"] = "Введите новый пароль"; $MESS["CONFIRM_NEW_PASSWORD"] = "Подтвердите новый пароль"; $MESS["NOT_THE_SAME"] = "Введенные пароли не совпдают"; $MESS["SEND"] = "Сохранить"; $MESS["SUCCESS"] = "Пароль успешно изменён";
?>
Битрикс компонент изменения пароля при помощи метода $USER->Login($USER->GetLogin(), $_REQUEST['old_password'], "Y") проверяет старый пароль, если он правильный – то меняет старый на новый, при помощи кода:
$ID = intval($USER->GetID());
$salt = randString(8);
$checkword = md5(CMain::GetServerUniqID().uniqid());
$_checkword = $salt.md5($salt.$checkword);
$strSql = "UPDATE b_user SET ".
" CHECKWORD = '".$_checkword."', ".
" CHECKWORD_TIME = ".$DB->CurrentTimeFunction().", ".
" LID = '".$DB->ForSql($SITE_ID, 2)."', ".
" TIMESTAMP_X = TIMESTAMP_X ".
"WHERE ID = '".$ID."'".
" AND (EXTERNAL_AUTH_ID IS NULL OR EXTERNAL_AUTH_ID='') ";
$DB->Query($strSql);
if($arResult['ERROR']==''){
$res = $USER->ChangePassword($USER->GetLogin(), $checkword, $_REQUEST['password'], $_REQUEST['confirm_password']);
Пользуйтесь на здоровье!Битрикс компонент изменения пароля