Коллеги, доброго времени суток.
На сайте есть страница авторизации /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. Перед созданием темы, знатно изучил свою проблему всеми возможными способами, прочел все необходимое на форуме, но решения не нашел, по-этому создал тему.