Недавно на одном из форумов, посвященных битриксу, нашел запись, где человек ищет битрикс компонент изменения пароля. Оказалось, простейший компонент отсутствует в системе. Поменять пароль в битрикс можно либо через профиль пользователя (bitrix:main.profile) либо при помощи отправки контрольной строки на емайл, перейдя по ссылке “забыли пароль”. Отдельного компонента изменения пароля в битриксе, к сожалению нету.
Я сделал этот компонент.
Давайте рассмотрим где могут лежать компоненты в битриксе:
в папке /bitrix/components/bitrix/ лежат стандартные компоненты битрикса
в папке /bitrix/components/название_компонента/ лежат компоненты, не являющиеся частью стандартной системы
также нестандартные компоненты могут лежать в папке /local/components/название_компонента/
Перейдем к написанию компонента изменения пароля битикс:
$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']);