Коллеги, доброго времени суток.
На сайте есть страница авторизации /auth/, где вызван компонент bitrix:system.auth.form.
Есть страница для запроса контрольной строки и восстановления пароля ( /forgot/ и /restore/ соответственно).
Для восстановления пароля переходим на страницу /forgot/, где вызван компонент bitrix:system.auth.forgotpasswd, вводим логин или email и жмем отправить - контрольная строка успешно приходит на почту (в базе видим, что у пользователя поменялось значение CHECKWORD т.е. отправленная строка действительно актуальна).
Везде, где выводятся компоненты, поставил шаблоны по умолчанию, во избежание ошибок с моей стороны..
Переходим по ссылке и попадаем в раздел /restore/, где сначала использовался компонент bitrix:system.auth.changepasswd, но по причине не возврата сообщений об ошибках был закомментирован и написан следующий код, который хотя-бы возвращает ошибки:
При успешном вводе нового пароля и его подтверждения (они равны и соответствуют всем правилам) получаю массив $arResult:
На странице, после отправки формы вывожу массив $_POST, что подтверждает, что USER_CHECKWORDвсе таки передается:
Посмотрел код метода, такая ошибка возникает если он пуст (не передается) или он не равен хешу пароля из базы:
НО! Если на странице перед подключением header.php установить значение константы define("AUTH", true), и запросить пароль посредством выведенной формы, то пароль успешно меняется. WTF?
Уважаемые знатоки, внимание, вопрос: "Из - за чего возникает такая проблема, и как её решить?". Заранее спасибо! Очень надеюсь на помощь...
--
p.s. Перед созданием темы, знатно изучил свою проблему всеми возможными способами, прочел все необходимое на форуме, но решения не нашел, по-этому создал тему.
На сайте есть страница авторизации /auth/, где вызван компонент bitrix:system.auth.form.
Есть страница для запроса контрольной строки и восстановления пароля ( /forgot/ и /restore/ соответственно).
Для восстановления пароля переходим на страницу /forgot/, где вызван компонент bitrix:system.auth.forgotpasswd, вводим логин или email и жмем отправить - контрольная строка успешно приходит на почту (в базе видим, что у пользователя поменялось значение CHECKWORD т.е. отправленная строка действительно актуальна).
Везде, где выводятся компоненты, поставил шаблоны по умолчанию, во избежание ошибок с моей стороны..
Переходим по ссылке и попадаем в раздел /restore/, где сначала использовался компонент bitrix:system.auth.changepasswd, но по причине не возврата сообщений об ошибках был закомментирован и написан следующий код, который хотя-бы возвращает ошибки:
| Код |
|---|
<?if(($_POST["AUTH_FORM"]=="Y")&&($_POST["TYPE"]=="CHANGE_PWD")){
global $USER;
$arResult = $USER->ChangePassword($_POST["USER_LOGIN"], $_POST["USER_CHECKWORD"], $_POST["USER_PASSWORD"], $_POST["USER_CONFIRM_PASSWORD"]);
if($arResult["TYPE"] == "OK"){
echo "Пароль успешно изменен.";
}else{
echo $arResult["MESSAGE"];
}
}
echo '<pre>';
print_r($arResult);
echo '</pre>';
if($arResult["TYPE"] != "OK"){
?>
<fo rm method="post" action="" name="bform" id="b-form">
<input type="hidden" name="backurl" value="">
<input type="hidden" name="AUTH_FORM" value="Y">
<input type="hidden" name="TYPE" value="CHANGE_PWD">
<input type="text" name="USER_LOGIN" maxlength="50" value="<?=$_GET['USER_LOGIN']?>" class="bx-auth-input" placeholder="Ваш логин" />
<input type="text" name="USER_CHECKWORD" maxlength="50" value="<?=$_GET["USER_CHECKWORD"]?>" class="bx-auth-input" placeholder="Контрольная строка"/>
<input type="password" name="USER_PASSWORD" maxlength="50" value="" class="bx-auth-input" autocomplete="off" placeholder="Новый пароль" />
<input type="password" name="USER_CONFIRM_PASSWORD" maxlength="50" value="" class="bx-auth-input" autocomplete="off" placeholder="Подтверждение пароля" />
<div class="clearfix b-form-buttons">
<input type="submit" name="change_pwd" value="Изменить пароль" />
</div>
</form>
<?}?>
|
При успешном вводе нового пароля и его подтверждения (они равны и соответствуют всем правилам) получаю массив $arResult:
| Код |
|---|
Array ( [MESSAGE] => Неверное контрольное слово для логина "test@mail.ru". [TYPE] => ERROR [FIELD] => CHECKWORD ) |
| Код |
|---|
Array ( [backurl] => [AUTH_FORM] => Y [TYPE] => CHANGE_PWD [USER_LOGIN] => test@mail.ru [USER_CHECKWORD] => 1a571b5f2170ff4ef7c0657c89befcd8 [USER_PASSWORD] => PASSWORDtest1!Q [USER_CONFIRM_PASSWORD] => PASSWORDtest1!Q [change_pwd] => Изменить пароль ) |
| Код |
|---|
if($res["CHECKWORD"] == '' || $res["CHECKWORD"] != $salt.md5($salt.$arParams["CHECKWORD"])) |
НО! Если на странице перед подключением header.php установить значение константы define("AUTH", true), и запросить пароль посредством выведенной формы, то пароль успешно меняется. WTF?
Уважаемые знатоки, внимание, вопрос: "Из - за чего возникает такая проблема, и как её решить?". Заранее спасибо! Очень надеюсь на помощь...
--
p.s. Перед созданием темы, знатно изучил свою проблему всеми возможными способами, прочел все необходимое на форуме, но решения не нашел, по-этому создал тему.